RestFul 风格

@PathVariable 注解

  • 概念

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

  • 功能
	资源:互联网所有的事物都可以被抽象为资源

​	资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

​	分别对应 添加、 删除、修改、查询。
  • 使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!
	http://127.0.0.1/item/1 查询,GET

​	http://127.0.0.1/item 新增,POST

​	http://127.0.0.1/item 更新,PUT

​	http://127.0.0.1/item/1 删除,DELETE

步骤

  • Controller层

变量前 + @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。

	//跳转到修改页面,使用RestFul风格
    @RequestMapping("/toUpdateBook/{id}")
    public String toUpdateBook(Model model,@PathVariable int id) {
        Books books = bookService.queryBookById(id);
        System.out.println(books);
        model.addAttribute("books",books );
        return "updateBook";
    }
  • 视图层( jsp )
传统方式
<a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a>
RestFul风格
<a href="${pageContext.request.contextPath}/book/toUpdateBook/${book.getBookID()}">更改</a>
  • 效果

alt

RestFul风格的好处

  • 安全

  • 使路径变得更加简洁;

  • 获得参数更加方便,框架会自动进行类型转换。

  • 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败。

    Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

所有的地址栏请求默认都会是 HTTP GET 类型的。

  • 方法级别的注解变体有如下几个:组合注解
@RequestMapping可以分为(RestFul风格):
    (1)@GetMapping		限制只能Get方法提交
    (2)@PostMapping		限制只能Post方法提交
    
不常用
    (3)@DeleteMapping	限制只能Delete方法提交
    (4)@PutMapping		限制只能Put方法提交
    (5)@PatchMapping	限制只能Patch方法提交

@GetMapping 是一个组合注解,平时使用的会比较多!

它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。

RestFul 原理(表单提交要使用REST的时候)

■ 用法: 表单method=post,隐藏域 _method=put

alt

■ Controller 层

	@GetMapping(value = "/user")
    public String getUser(){
        return "GET-张三";
    }

    @PostMapping(value = "/user")
    public String saveUser(){
        return "POST-张三";
    }


    @PutMapping(value = "/user")
    public String putUser(){
        return "PUT-张三";
    }

    @DeleteMapping(value = "/user")
    public String deleteUser(){
        return "DELETE-张三";
    }

■ SpringBoot中手动开启

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true   #开启页面表单的Rest功能

Rest原理(表单提交要使用REST的时候)


● 表单提交会带上_method=PUT

● 请求过来被HiddenHttpMethodFilter拦截

 	○ 判断请求是否正常,提交方式是否为POST
  
   		■ 获取到_method的值。
    
    	■ 兼容以下请求;PUT.DELETE.PATCH
    
    	■ 原生request(post),包装模式requesWrapper重写了getMethod方法,返回的是传入的值。
    
    	■ 过滤器链放行的时候用wrapper。以后的方法调用getMethod是调用requesWrapper的。