当前位置:网站首页>9. Rest style request processing

9. Rest style request processing

2022-08-10 23:48:00 If you want to learn, learn Big Wolf


9.1 基本介绍

  1. Rest 风格支持 (使用 HTTP 请求方式动词来表示对资源的操作)

  2. 举例说明:

    ● 请求方式: /monster
    ● GET - Get the little monster
    ● DELETE - Delete the little monster
    ● PUT - Modify the little monster
    ● POST - Save the little monster

9.2 SpringBoot Rest Example of style application

9.2.1 需求说明

  • 演示 SpringBoot 中如何实现 Rest 风格的 增删改查

在这里插入图片描述


9.2.2 应用实例

  1. 创建 D:\xjs_springboot\springbootweb\src\main\java\com\xjs\springboot\controller\MonsterController.java
package com.xjs.springboot.controller;

import org.springframework.web.bind.annotation.*;

/** * @Author: 谢家升 * @Version: 1.0 */
@RestController
public class MonsterController {
    

    //@RequestMapping(value = "/monster", method = RequestMethod.GET)
    @GetMapping("/monster")
    public String getMonster() {
    
        return "GET-Inquire about little monsters";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.POST)
    @PostMapping("/monster")
    public String saveMonster() {
    
        return "POST-添加小妖怪";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.PUT)
    @PutMapping("/monster")
    public String putMonster() {
    
        return "PUT-Modify the little monster";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.DELETE)
    @DeleteMapping("/monster")
    public String delMonster() {
    
        return "DELETE-Delete the little monster";
    }

}

  1. 使用 Postman 完成测试,请求 url: http://localhost:8080/monster

在这里插入图片描述


9.2.3 Rest 风格请求 -注意事项和细节

  1. 客户端是 PostMan 可以直接发送 Put、delete 等方式请求,可不设置 Filter

  2. 如果要 SpringBoot 支持 page form Rest 功能,You need to pay attention to the following details

    ① Rest Style request core Filter — HiddenHttpMethodFilter
    ② The form request will be HiddenHttpMethodFilter 拦截,Get the form _method 的值, 再判断是 PUT/DELETE/PATCH
    ③ 说明:PATCH 方法是新引入的,是对 PUT 方法的补充,用来对已知资源进行局部更新
    https://segmentfault.com/q/1010000005685904

  3. 如果要 SpringBoot 支持 page form Rest 功能,需要在 application.yml 启用 filter 功能,否则无效

  4. 修改 application.yml 启用 filter 功能

在这里插入图片描述

spring:
  mvc:
    static-path-pattern: /xjsres/**  #Modify the path of static resource access/前缀
    hiddenmethod:
      filter:
        enabled: true #启用了 HiddenHttpMethodFilter 开启page form rest 功能
  web:
    resources:
      #修改/指定 静态资源的 存放路径/位置 # String[] staticLocations
      #注意:配置了 static-locations The original access path is overwritten,如果需要保留,To specify again
      static-locations: ["classpath:/xjsimg/", "classpath:/META-INF/resources/",
                         "classpath:/resources/", "classpath:/static/", "classpath:/public/"]

  1. 创建测试页面 D:\xjs_springboot\springbootweb\src\main\resources\public\rest.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rest</title>
</head>
<body>
<h1>测试rest风格的url, 来完成请求</h1>
<form action="/monster" method="post">
    name: <input type="text" name="name"><br/>
    <!--通过隐藏域传递 _method 参数指定值-->
    <input type="hidden" name="_method" value="put">
    <input type="submit" value="点击提交">
</form>
</body>
</html>
  1. 完成测试,注意 url 是 localhost:8080/xjsres/rest.html,如果希望 url 是
    localhost:8080/rest.html,将 application.yml 中的 static-path-pattern: /xjsres/** 注销即可

在这里插入图片描述


在这里插入图片描述


9.3 思考题

  1. 为什么这里 return "GET-查询妖怪" ,返回的是字符串,rather than forwarding to 对
    corresponding resource file?
package com.xjs.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/** * @Author: 谢家升 * @Version: 1.0 */
//@RestController
@Controller
public class MonsterController {
    

    /** * 思考题:为什么这里 return "GET-查询妖怪" ,返回的是字符串,rather than forwarding to 对 * corresponding resource file? * * 解读: * 1. 因为@ResController 是一个复合注解, 含有@ResponseBody * 2. 所以 springboot 底层(springmvc), 在处理 return "xxx" 时, * 会以@ResponseBody 注解进行解析处理, 即返回字符串 "xxx", without using the view resolver * 3. 可以试一下, 如果我们把 @RestController 改成 @Controller , 当你访问 * getMonster() 时, 如果你有 xxx.html 会转发到 xxx.html , 如果没有 xxx.html , 就会报 404 * 4. 提示: 在测试时, 将 xxx.html 放在 main\resources\public\xxx.html 进行测试, 并在 * application.yml 配置视图解析器 */

    //@RequestMapping(value = "/monster", method = RequestMethod.GET)
    @GetMapping("/monster")
    public String getMonster() {
    
        return "GET-Inquire about little monsters";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.POST)
    @PostMapping("/monster")
    public String saveMonster() {
    
        return "POST-添加小妖怪";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.PUT)
    @PutMapping("/monster")
    public String putMonster() {
    
        return "PUT-Modify the little monster";
    }

    //@RequestMapping(value = "/monster", method = RequestMethod.DELETE)
    @DeleteMapping("/monster")
    public String delMonster() {
    
        return "DELETE-Delete the little monster";
    }

    @RequestMapping("/go")
    public String go() {
    
        return "hello";
        //注意:
        // 1.看controller 有没有 /hello [The premise is that no view resolver is configured]
        // 2.If a view resolver is configured, the page is located according to the view resolver
    }

}

---------- 在 application.yml 配置解析器 ----------

在这里插入图片描述

spring:
  mvc:
    static-path-pattern: /xjsres/**  #Modify the path of static resource access/前缀
    hiddenmethod:
      filter:
        enabled: true #启用了 HiddenHttpMethodFilter 支持 rest风格请求
    view:    # 配置了视图解析器
      suffix: .html
      prefix: /xjsres/       # 这里需要注意 前缀prefix 要考虑 static-path-pattern 的配置
  web:
    resources:
      #修改/指定 静态资源的 存放路径/位置 # String[] staticLocations
      #注意:配置了 static-locations The original access path is overwritten,如果需要保留,To specify again
      static-locations: ["classpath:/xjsimg/", "classpath:/META-INF/resources/",
                         "classpath:/resources/", "classpath:/static/", "classpath:/public/"]

  1. Test possible problems and solution analysis

在这里插入图片描述


  • 如何解决

在这里插入图片描述

原网站

版权声明
本文为[If you want to learn, learn Big Wolf]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/222/202208102335003104.html