Restful风格

Restful概述

Rest( REpresentational State Transfer) 一种网络资源的访问风格,定义了网络资源的访问方式。

  • 传统风格访问路径:http://localhost/user/get?id=1

  • Rest风格访问路径:http://localhost/user/1

特点:

  • 不明确显示参数信息。(通过路径中的某部分来传递参数)
  • 隐藏资源的访问行为,通过地址无法得知做的是何种操作。(通过请求方式来确定操作行为)

行为约定

  • GET请求: http://localhost/user/1 (查询)
  • POST请求: http://localhost/user (保存)
  • PUT请求: http://localhost/user (更新)
  • DELETE请求 http://localhost/user (删除)
  • 注意:上述行为是约定方式,约定不是规范,可以打破,所以称Rest风格,而不是Rest规范

Restful开发

Restful风格的控制器
@RestController		//相当于@Controller + @ResponseBody
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/user/{id}")
    //使用@PathVariable注解获取请求路径上的一部分
    public String restLocation(@PathVariable Integer id){	
        System.out.println("restful is running ....");
        return "success.jsp";
    }

    @RequestMapping("{id}")
    public String restLocation2(@PathVariable Integer id){
        System.out.println("restful is running ....get:"+id);
        return "success.jsp";
    }
    
   	//相当于 @RequestMapping(value = "{id}",method = RequestMethod.GET)
    @GetMapping("{id}") 
    public String get(@PathVariable Integer id){
        System.out.println("restful is running ....get:"+id);
        return "success.jsp";
    }

    //相当于 @RequestMapping(value = "{id}",method = RequestMethod.POST)
    @PostMapping("{id}")
    public String post(@PathVariable Integer id){
        System.out.println("restful is running ....post:"+id);
        return "success.jsp";
    }

    //相当于 @RequestMapping(value = "{id}",method = RequestMethod.PUT)
    @PutMapping("{id}")
    public String put(@PathVariable Integer id){
        System.out.println("restful is running ....put:"+id);
        return "success.jsp";
    }

    //相当于 @RequestMapping(value = "{id}",method = RequestMethod.DELETE)
    @DeleteMapping("{id}")
    public String delete(@PathVariable Integer id){
        System.out.println("restful is running ....delete:"+id);
        return "success.jsp";
    }
}
<form action="/user/1" method="post">
    <input type="hidden" name="_method" value="PUT"/>
    <input type="submit"/>
</form>

注意
html页面只能发送get或post请求,所以,如果想使用Restful风格开发,则要求:

  • 表单提交方式必须是post
  • 表单中必须由一个隐藏域,参数名称固定为_method,值为真正的请求方式。
  • 必须配置指定的拦截器,用来解析真正的请求方式
配置拦截器
<!--配置拦截器,解析请求中的参数_method,否则无法发起PUT请求与DELETE请求,配合页面表单使用-->
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <servlet-name>DispatcherServlet</servlet-name>
</filter-mapping>
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页