😀前言
本篇博文是关于Rest 风格请求的应用和注意事项,希望能够帮助到您😊
🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊
Rest 风格请求处理
基本介绍
REST:即Representational State Transfer。(资源)表现层状态转化。是目前流行的请求方式。它结构清晰, 很多网站采用
- Rest 风格支持(使用HTTP 请求方式动词来表示对资源的操作)
- 举例说明:
● 请求方式: /monster
● GET-获取怪物
● DELETE-删除怪物
● PUT-修改怪物
● POST-保存妖怪
SpringBoot Rest 风格应用实例
需求: 演示SpringBoot 中如何实现Rest 风格的增删改查
应用实例
1.创建com/nlc/web/controller/MonsterController.java
@RestController
//@Controller
public class MonsterController {
//等价的写法
//@RequestMapping(value = "/monster",method = RequestMethod.GET)
@GetMapping("/monster")
public String getMonster() {
return "GET-查询妖怪";
}
//等价写法
//@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-修改妖怪~~";
}
//等价写法
//@RequestMapping(value = "/monster", method = RequestMethod.DELETE)
@DeleteMapping("/monster")
public String delMonster() {
return "DELETE-删除妖怪";
}
}
- 使用Postman 完成测试, 请求url: http://localhost:8080/monster
Rest 风格请求-注意事项和细节
1、客户端是PostMan 可以直接发送Put、delete 等方式请求,可不设置Filter
2、如果要SpringBoot 支持页面表单的Rest 功能, 则需要注意如下细节
注意
- Rest 风格请求核心Filter :HiddenHttpMethodFilter:浏览器form 表单只支持GET 与POST 请求,而DELETE、PUT等method 并不支持,Spring 添加了一个过滤器,可以将这些请求转换为标准的http 方法,使得支持GET、POST、PUT 与DELETE 请求。
- 、HiddenHttpMethodFilter 在将post 转成delete / put 请求时,是按_method 参数名来读取的。
- 表单请求会被HiddenHttpMethodFilter 拦截, 获取到表单_method 的值, 再判断是PUT/DELETE/PATCH(注释: PATCH 方法是新引入的,是对PUT 方法的补充,用来对已知资源进行局部更新:https://segmentfault.com/q/1010000005685904)。
- 如果要SpringBoot 支持页面表单的Rest 功能, 需要在application.yml 启用filter 功能,否则无效。
- 修改application.yml 启用filter 功能。
spring:
mvc:
static-path-pattern: /res/** #修改静态资源访问的路径/前缀
hiddenmethod:
filter:
enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能
web:
resources:
#修改/指定 静态资源的访问路径/位置
static-locations: ["classpath:/img/","classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"]
#String[] staticLocations
- 修改对应的页面, 自己测试即可.
- 创建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">
u: <input type="text" name="name"><br/>
<!-- 通过隐藏域传递_method 参数指定值-->
<!--如果要测试delete, put , 就打开下面的注释-->
<!-- <input type="hidden" name="_method" value="delete">-->
<input type="submit" value="点击提交">
</form>
</body>
</html>
- 完成测试, 注意url 是localhost:8080/res/rest.html, 如果希望url 是localhost:8080/rest.html, 将application.yml 文件的static-path-pattern: /res/** 注销即可
小细节:思考
为什么这里return “GET-查询妖怪”, 返回的是字符串, 而不是转发到对应的资源文件?
解读:
因为@ResController 是一个复合注解, 含有@ResponseBody, 所以springboot 底层(springmvc), 在处理return “xxx” 时, 会以@ResponseBody 注解进行解析处理, 即返回字符串"xxx", 而不会使用视图解析器来处理。
我们可以试一下, 如果我们把@RestController 改成@Controller , 当你访问getMonster() 时, 如果你有xxx.html就会转发到xxx.html , 如果没有xxx.html , 就会报404。
提示: 在测试时, 将xxx.html 放在main\resources\public\xxx.html 进行测试, 并在application.yml 配置视图解析器
@GetMapping("/monster")
public String getMonster() {
return "GET-查询妖怪";
}
—在application.yml 配置解析器-----
spring:
mvc:
view:
suffix: .html #后缀
prefix: / #前缀
—提示: 测试完后, 把代码恢复原状-----
使用Postman 进行测试, 可能出现的问题和解决方案分析.
如何解决
spring:
mvc:
# static-path-pattern: /res/** #修改静态资源访问的路径/前缀
hiddenmethod:
filter:
enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能
view: #配置视图解析器
suffix: .html
prefix: / #这里是需要注意 prefix需要和当前的static-path-pattern一致。如果不一致就无法访问到静态资源
😄总结
- 不含有@ResponseBody时, springboot 底层(springmvc) 在处理return “xxx” 时是有顺序的。
- 如果配置了视图解析器,就按照视图解析器来定位;如果没有配置视图解析器,就看controller有没有/xxx
- HiddenHttpMethodFilter 在将post 转成delete / put 请求时,是按_method 参数名来读取的。
😁热门专栏推荐
SpringBoot篇
SpringBoot容器–注解的使用
以数据为中心的标记语言–yaml
SpringBoot 自动配置–常用配置
Spring Boot介绍–快速入门–约定优于配置
安装Lombok–Lombok的常用注解说明及使用方法
SpringBoot 依赖管理和自动配置—带你了解什么是版本仲裁文章来源:https://www.toymoban.com/news/detail-642214.html
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞文章来源地址https://www.toymoban.com/news/detail-642214.html
到了这里,关于Rest 优雅的url请求处理风格及注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!