• SpringMVC(四)REST风格


    一、REST简介

    REST(Representational State Transfer),表现形式状态转换

    (1)传统风格资源描述形式     

            http://localhost/user/getById?id=1     

            http://localhost/user/saveUser

    (2)REST风格描述形式     

            http://localhost/user/1     

            http://localhost/user

    优点:

    (1)隐藏资源的访问行为,无法通过地址得知对资源是何种操作

    (2)书写简化

    按照REST风格访问资源时使用行为动作区分对资源进行了何种操作

    http://localhost/users        查询全部用户信息             GET(查询)

    http://localhost/users/1     查询指定用户信息             GET(查询)

    http://localhost/users        添加用户信息                    POST(新增/保存)

    http://localhost/users        修改用户信息                    PUT(修改/更新)

    http://localhost/users/1     删除用户信息                    DELETE(删除)

    根据REST风格对资源进行访问称为 RESTful

    上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范

    描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts……

    二、RESTful 入门案例

    1. 新增

    1. @Controller
    2. public class UserController {
    3. //设置当前请求方法为POST,表示REST风格中的添加操作
    4. @RequestMapping(value = "/users",method = RequestMethod.POST)
    5. @ResponseBody
    6. public String save(){
    7. System.out.println("user save...");
    8. return "{'module':'user save'}";
    9. }
    10. }

    2. 删除

    1. @Controller
    2. public class UserController {
    3. //设置当前请求方法为DELETE,表示REST风格中的删除操作
    4. //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    5. @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    6. @ResponseBody
    7. public String delete(@PathVariable Integer id){
    8. System.out.println("user delete..." + id);
    9. return "{'module':'user delete'}";
    10. }
    11. }

    3. 修改

    1. @Controller
    2. public class UserController {
    3. //设置当前请求方法为PUT,表示REST风格中的修改操作
    4. @RequestMapping(value = "/users",method = RequestMethod.PUT)
    5. @ResponseBody
    6. public String update(@RequestBody User user){
    7. System.out.println("user update..."+user);
    8. return "{'module':'user update'}";
    9. }
    10. }

    4. 根据ID查询

    1. @Controller
    2. public class UserController {
    3. //设置当前请求方法为GET,表示REST风格中的查询操作
    4. //@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
    5. @RequestMapping(value = "/users/{id}" ,method = RequestMethod.GET)
    6. @ResponseBody
    7. public String getById(@PathVariable Integer id){
    8. System.out.println("user getById..."+id);
    9. return "{'module':'user getById'}";
    10. }
    11. }

    5. 查询所有

    1. @Controller
    2. public class UserController {
    3. //设置当前请求方法为GET,表示REST风格中的查询操作
    4. @RequestMapping(value = "/users",method = RequestMethod.GET)
    5. @ResponseBody
    6. public String getAll(){
    7. System.out.println("user getAll...");
    8. return "{'module':'user getAll'}";
    9. }
    10. }

    三、@RequestBody@RequestParam、@PathVariable 的区别

    区别
    (1)@RequestParam  用于接收  url  地址传参或表单传参
    (2)@RequestBody  用于接收  json  数据
    (3)@PathVariable  用于接收路径参数,使用 { 参数名称 } 描述路径参数
    应用:
    (1)后期开发中,发送请求参数超过 1 个时,以  json  格式为主, @RequestBody  应用较广
    (2)如果发送非  json  格式数据,选用  @RequestParam  接收请求参数
    (3)采用  RESTful  进行开发,当参数数量较少时,例如 1 个,可以采用  @PathVariable 接收请求路径变量,通常用于传递  id 

    四、RESTful快速开发

    问题 1 :每个方法的  @RequestMapping  注解中都定义了访问路径 /books ,重复性太高。
    @RequestMapping  提到类上面,用来定义所有方法共同的访问路径。

    问题2:每个方法的 @RequestMapping 注解中都要使用 method 属性定义请求方式,重复性太高。

    使用@GetMapping @PostMapping @PutMapping @DeleteMapping代替

    问题3:每个方法响应json都需要加上@ResponseBody注解,重复性太高。

    (1) 将  ResponseBody  提到类上面,让所有的方法都有  @ResponseBody  的功能
    (2) 使用  @RestController   注解替换  @Controller  与  @ResponseBody  注解,简化书写
    1. //@Controller
    2. //@ResponseBody配置在类上可以简化配置,表示设置当前每个方法的返回值都作为响应体
    3. //@ResponseBody
    4. @RestController //使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
    5. @RequestMapping("/books")
    6. public class BookController {
    7. // @RequestMapping( method = RequestMethod.POST)
    8. @PostMapping //使用@PostMapping简化Post请求方法对应的映射配置
    9. public String save(@RequestBody Book book){
    10. System.out.println("book save..." + book);
    11. return "{'module':'book save'}";
    12. }
    13. // @RequestMapping(value = "/{id}" ,method = RequestMethod.DELETE)
    14. @DeleteMapping("/{id}") //使用@DeleteMapping简化DELETE请求方法对应的映射配置
    15. public String delete(@PathVariable Integer id){
    16. System.out.println("book delete..." + id);
    17. return "{'module':'book delete'}";
    18. }
    19. // @RequestMapping(method = RequestMethod.PUT)
    20. @PutMapping //使用@PutMapping简化Put请求方法对应的映射配置
    21. public String update(@RequestBody Book book){
    22. System.out.println("book update..."+book);
    23. return "{'module':'book update'}";
    24. }
    25. // @RequestMapping(value = "/{id}" ,method = RequestMethod.GET)
    26. @GetMapping("/{id}") //使用@GetMapping简化GET请求方法对应的映射配置
    27. public String getById(@PathVariable Integer id){
    28. System.out.println("book getById..."+id);
    29. return "{'module':'book getById'}";
    30. }
    31. // @RequestMapping(method = RequestMethod.GET)
    32. @GetMapping //使用@GetMapping简化GET请求方法对应的映射配置
    33. public String getAll(){
    34. System.out.println("book getAll...");
    35. return "{'module':'book getAll'}";
    36. }
    37. }

     五、案例:基于RESTful页面数据交互

    1. SpringMVC需要将静态资源进行放行。

     

  • 相关阅读:
    sql语法复习
    react 实现自动创建api 请求文件
    最靠谱的nvm安装教程 for mac
    Ubuntu22.04+Nvidia驱动+Cuda11.8+cudnn8.6
    21 | 多线程3
    【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码
    Maven 核心插件 maven-clean-plugin 使用详解
    模型降阶方法之 POD
    Python基础入门篇【46】--python中的加密工具:哈希加密&base64加密
    ABP Framework 5.2 RC 发布及新增功能介绍
  • 原文地址:https://blog.csdn.net/yirenyuan/article/details/127768275