用 Java 创建 RESTful Web 服务

  • Post author:
  • Post category:java


REST 全称是: representational state transfer,可以是一种建筑风格(architectural style),对于分布式的超媒体系统来说。

  1. 网络上的所有事物都可以具象为资源(通过URL)

  2. 每个资源都应该有唯一的标识(identifier),对资源的操作不会改变标识

  3. 所有的操作都是无状态的,对REST接口的访问,不会改变资源的状态

  4. 使用标准方法(GET、POST、PUT、PATCH、DELETE)操作资源

我们做一个小例子

1.eclipse创建一个动态项目工程

2.导入所需jar包

3. 在com.test包中创建一个RestfulTest类

package com.test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("UserInfoService")
public class RestfulTest {
	 
	@GET
	@Path("/name/{i}")
	@Produces(MediaType.TEXT_XML)
	public String userName(@PathParam("i") String i) {
	String name = i;
	return "<User>" + "<Name>" + name + "</Name>" + "</User>";

	 
}}

@Path 注释被用来描述根资源、子资源方法或子资源的位置

@Produces 注释代表的是一个资源可以返回的 MIME 类型。

@GET、@POST、@PUT、@DELETE 以及 @HEAD 均是 HTTP 请求方法指示符注释。您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法。HTTP GET 请求被映射到由 @GET 注释的方法;HTTP POST 请求被映射到由 @POST 注释的方法,以此类推。用户可能还需要通过使用 @HttpMethod 注释定义其自己的定制 HTTP 请求方法指示符。

@PathParam向@Path定义的表达式注入URI参数值。

4.配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
  id="WebApp_ID" version="3.1">
  <display-name>restfulTest</display-name>
 
  <servlet>
    <servlet-name>Restful</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
     <!--  服务包所在路径 -->
      <param-value>com.test</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Restful</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping> 
</web-app>

5.在浏览器上输入url响应地址


http://localhost:8081/restfulTest/rest/UserInfoService/name/happy

6.Post接口接收json数据

@POST
    @Path("/barChart")
    @Produces(MediaType.APPLICATION_JSON)
    public String barChart(@Context HttpServletRequest request,@Context HttpServletResponse response) throws Exception{
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setContentType("application/json;charset=utf-8");
        StringBuffer str = new StringBuffer();
        BufferedInputStream in = new BufferedInputStream(request.getInputStream());
        int i;
        char c;
        while ((i = in.read()) != -1) {
            c = (char) i;
            str.append(c);
        }
        String strJson = java.net.URLDecoder.decode(str.toString(),"utf-8");
        JSONObject jsonObject = JSONObject.parseObject(strJson);
        int timeid = jsonObject.getInteger("timeid");
        int indexid=jsonObject.getInteger("indexid");
        String barChart = jsonservice.getBarChart(timeid, indexid);
        return barChart;
    }



版权声明:本文为yin_xing_ye原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。