如何使用REST请求风格

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。
它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用。
HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
它们分别对应四种基本操作:

  • GET 用来获取资源
  • POST 用来新建资源
  • PUT 用来更新资源
  • DELETE 用来删除资源

示例:

  • /order/1 HTTP GET :得到 id = 1 的 order
  • /order/1 HTTP DELETE:删除 id = 1的 order
  • /order/1 HTTP PUT:更新id = 1的 order
  • /order HTTP POST:新增 order

浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器HiddenHttpMethodFilter,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。
POST请求如何转化为put请求和delele请求?
1、在web.xml文件中配置:

 1 <!-- 配置springMVC -->
 2 <servlet>
 3     <servlet-name>SpringMVC</servlet-name>
 4     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5     <!-- contextConfigLocation配置SpringMVC加载的配置文件(配置处理器映射器、适配器等等)-->
 6     <init-param>
 7         <param-name>contextConfigLocation</param-name>
 8         <param-value>classpath:springmvc.xml</param-value>
 9     </init-param>
10     <load-on-startup>1</load-on-startup>
11 </servlet>
12 <servlet-mapping>
13     <servlet-name>SpringMVC</servlet-name>
14     <!-- 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 
15         第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 
16         使用此种方式可以实现 RESTful风格的URL 
17         第三种:/*,这样配置不对,使用这种配置,最终要转发到一个JSP页面时, 仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。 -->
18     <url-pattern>/</url-pattern>
19 </servlet-mapping>
20 <!-- HiddenHttpMethodFilter过滤器可以将POST请求转化为put请求和delete请求! -->
21 <filter>
22   <filter-name>hiddenHttpMethodFilter</filter-name>
23   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
24 </filter>
25 <filter-mapping>
26   <filter-name>hiddenHttpMethodFilter</filter-name>
27   <url-pattern>/*</url-pattern>
28 </filter-mapping>

2、在表单域中需要携带一个name值为_method,value值为put或者delete的参数,get和post方法正常使用,如下所示:

 1 <!-- REST-----GET -->
 2 <a href="${pageContext.request.contextPath }/order/1">提交get请求</a>
 3 <!-- REST-----POST -->
 4 <form action="${pageContext.request.contextPath }/order/1" method="post">
 5     <input type="submit" value="提交POST请求">
 6 </form>
 7 <!-- REST-----PUT -->
 8 <form action="${pageContext.request.contextPath }/order/1" method="post">
 9     <input type="hidden" name="_method" value="put">
10     <input type="submit" value="提交put请求">
11 </form>
12 <!-- REST-----DELETE -->
13 <form action="${pageContext.request.contextPath }/order/1" method="post">
14     <input type="hidden" name="_method" value="delete">
15     <input type="submit" value="提交delete请求">
16 </form>

3、在后台接收参数并作处理,

@RequestMapping中的参数名称必须和@PathVariable中value的值相同。
 1 public static String SUCCESS="success";//WEB-INF下的success.jsp
 2 //REST请求方式-----GET获取
 3 @RequestMapping(value="/order/{id}",method=RequestMethod.GET)
 4 public String helloGet(@PathVariable(value="id") Integer id){
 5     System.out.println("GET-------"+id);
 6     return SUCCESS;
 7 }
 8 //REST请求方式-----POST添加
 9 @RequestMapping(value="/order/{id}",method=RequestMethod.POST)
10 public String helloPost(@PathVariable(value="id") Integer id){
11     System.out.println("POST-------"+id);
12     return SUCCESS;
13 }
14 //REST请求方式-----PUT修改
15 @RequestMapping(value="/order/{id}",method=RequestMethod.PUT)
16 public String helloPut(@PathVariable(value="id") Integer id){
17     System.out.println("PUT-------"+id);
18     return SUCCESS;
19 }
20 //REST请求方式-----DELETE删除
21 @RequestMapping(value="/order/{id}",method=RequestMethod.DELETE)
22 public String helloDelete(@PathVariable(value="id") Integer id){
23     System.out.println("DELETE-------"+id);
24     return SUCCESS;
25 }

 

posted @ 2017-08-21 19:32  bwlu---ed  阅读(1767)  评论(0编辑  收藏  举报