42、springboot 的 路径匹配 和 内容协商

这篇具有很好参考价值的文章主要介绍了42、springboot 的 路径匹配 和 内容协商。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springboot 的 路径匹配 和 内容协商

对于路径匹配,自己的总结就是:
以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 @RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。

内容协商的理解总结:
就是通过添加 xml 依赖,或者在yml配置文件中进行一些配置,来指定访问的方法响应回来的数据类型,比如 json、xml 等。

★ 路径匹配

 以前:路径匹配时默认不检查后缀。

 比如请求 "GET  /users.json"

 Spring MVC可用@GetMapping("/users")修饰的处理方法来处理该请求。

 Pathmatch类中定义了如下一行:

 private boolean useSuffixPattern = false; 

 表明Spring Boot默认的路径匹配会执行后缀检查,
 这意味着“GET /users.json”请求不会匹配到@GetMapping("/users")注解修饰的处理方法。

 【可见】:Spring Boot不再建议使用 请求后缀 作为 “内容协商” 的方式。

 【简单来说】 请求地址必须与@RequestMapping映射的地址完全相同,不支持请求地址后面带后缀。

对于路径匹配,自己的总结就是:
以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 @RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。

★ 何谓内容协商

内容协商:服务器中控制器的一个处理方法可根据请求自动生成不同 content-type 的响应,比如HTML响应、JSON、XML响应,甚至EXCEL、PDF响应等。

内容协商时如何判断客户端希望接收的响应类型呢?

- 根据Accept请求头(最主流的方式,尤其在RESTful)

- 根据请求地址的后缀,比如请求/users.json,表明希望服务器生成JSON响应。 (已经不再推荐,可能会被彻底删除)

- 根据额外的请求参数。比如请求/users?format=json,表明希望服务器生成JSON响应。

提示:关于内容协商的深入介绍和详细示例,可以参考《轻量级Java Web企业应用实战》的6.5.8小节。

代码演示:

需求:根据设置Accept请求头来演示返回的响应类型。

返回json格式:

添加注解 @RestController 返回的就是 json 格式的数据
42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

返回 xml 格式:

要返回xml 格式的数据,需要添加xml 的依赖
42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

如图:代码没变,如果添加了这个 xml 依赖 ,访问这个方法,返回的自己就变成了 xml 格式的响应了。

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

postman 测试

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

★ 内容协商的推荐方式

- 优先使用Accept请求头。

- 如果不设置合适的Accept请求头,建议使用额外的format参数来告诉服务器生成的响应类型,
  比如”GET /users?format=json“告诉服务器生成JSON响应。

在Contentnegotiation类的源代码中,包含如下行:
 - private boolean favorParameter = false;
表明Spring Boot默认关闭了使用额外的参数来指定响应类型。

可通过如下配置来启用这个 --> 使用额外的参数来指定响应类型:
spring.mvc.contentnegotiation.favor-parameter=true

# 设置使用额外的fkft请求参数(代替原来默认的format请求参数)来指定响应的内容类型
spring.mvc.contentnegotiation.parameter-name=fkft

【为了生成XML响应,首先需要让应用增加XML支持,比如Jackson Dataformat  XML】

代码演示:

需求:通过使用额外的参数来指定响应类型

配置这个就能启动 【使用额外参数来执行响应类型】的功能。默认是关闭的,需要在配置中启动。
这种就是内容协商。

#配置通过使用额外的参数来指定响应类型
spring:
  mvc:
    contentnegotiation:
      favor-parameter: true

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

演示这个功能:
# 设置使用额外的 ljh 请求参数名(代替原来默认的format请求参数名)来指定响应的内容类型
spring.mvc.contentnegotiation.parameter-name=ljh

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

内容协商的理解总结:就是通过添加 xml 依赖,或者在yml配置文件中进行一些配置,来指定访问的方法响应回来的数据类型,比如 json、xml 等。

★ 强制开启基于后缀匹配的内容协商。

需要同时开启两个设置:
 - 路径匹配时启用”后缀匹配“(不检查后缀)
 - 内容协商时使用后缀

添加如下配置:
# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping("/users")
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true


▲ 更安全的配置:

在路径匹配时,后缀匹配只匹配那些已经注册过的后缀类型,比如.json、.xml等,但对于.exe这种未知的后缀那就依然不匹配。

# 设置路径匹配时忽略检查后缀
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true
# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-pattern=true
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown

代码演示:

# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping("/users")
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true

演示通过 后缀名 来返回指定的响应类型。强制开启基于后缀匹配的内容协商
如图:
后缀为 .xml 返回的响应类型就是 xml
后缀为 .json 返回的响应类型就是 json
后缀为 .abc 乱写的,返回的响应类型就是原本不添加后缀的响应类型

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

因为后缀乱写都能匹配到,所以安全起见需要再配置一些东西

# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-pattern=true
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown

通过配置这个 spring.mvc.pathmatch.use-registered-suffix-pattern=true,设置只匹配已注册的后缀类型后,乱写后缀就匹配不到方法了,安全性提高了一点
42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

这个是自定义的拓展名:

# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
# 指定 .markdown 后缀 和 text/markdown 之间的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown

自定义的拓展名,不过应该是没有这个text/markdown与之对应,所以报错
42、springboot 的 路径匹配 和 内容协商,springboot,spring boot

42、springboot 的 路径匹配 和 内容协商,springboot,spring boot文章来源地址https://www.toymoban.com/news/detail-686285.html

到了这里,关于42、springboot 的 路径匹配 和 内容协商的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 71 # 协商缓存的配置:通过内容

    比较一下再去决定是用缓存还是重新获取数据,这样会减少网络请求,提高性能。 客户端第一次请求服务器的时候,服务器会把数据进行缓存,同时会生成一个缓存标识符,这个缓存标识符会被发送到客户端,客户端第二次请求服务器的时候,会把缓存标识符发送到服务器,

    2024年02月11日
    浏览(29)
  • Spring Boot存在路径遍历漏洞CVE-2021-22118

    背景:Spring Boot存在路径遍历漏洞。CVE-2021-22118: 官方 issue也有对此的记录,感兴趣可以看下 https://github.com/spring-projects/spring-boot/issues/26627 https://github.com/spring-projects/spring-boot/issues/27543 CVE-2021-22118 是一个在 Spring Boot 中发现的漏洞。该漏洞关系到 Spring Boot 的开发者工具(Devtoo

    2024年02月11日
    浏览(43)
  • spring boot + Apache tika 实现文档内容解析

    Apache tika 是 Apache 开源的一个文档解析工具。 Apache Tika 可以解析和提取一千多种不同的文件类型(如PPT、XLS和PDF)的内容和格式,并且 Apache Tika 提供了多种使用方式,既可以使用图形化操作页面(tika-app),又可以独立部署(tika-server)通过接口调用,还可以引入到项目中使用。

    2024年02月14日
    浏览(32)
  • RabbitMQ和spring boot整合及其他内容

    在现代分布式应用程序的设计中,消息队列系统是不可或缺的一部分,它为我们提供了解耦组件、实现异步通信和确保高性能的手段。RabbitMQ,作为一款强大的消息代理,能够协助我们实现这些目标。在本篇CSDN博客中,我们将探讨一些高级主题,包括RabbitMQ与Spring Boot的整合、

    2024年02月07日
    浏览(43)
  • HTTP1.1(七)内容协商和资源表述

    一   内容协商和资源表述 ①  铺垫 ②  内容协商概念 ③  内容协商的 两种 方式 ④  主动式 内容协商 ⑤  响应式 内容协商 ⑥  常见的 协商要素 ⑦  资源表述的 元数据 头部 ⑧  Accept系列  Content系列

    2024年02月05日
    浏览(25)
  • 基于spring boot的JsonSerializer 业务内容国际化

    说起国际化,真的是老生常谈了。后端有各种i18n的依赖组件,springboot本身也支持i18n的设置,前端vue也有i18n的设置,这些常规操作就不提了,大家可以去搜索其他博客,写的都很详细。 本篇博客主要写的是业务内容国际化。举一个最常用最简单的例子,学生选课,课程有\\\"语

    2024年02月09日
    浏览(34)
  • 【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

    在实际开发过程中,可能有时候,我们将文件放在resource下,在程序中需要获取到文件路径然后操作。比如,将公钥放到resource文件夹下,在程序中需要获取到这个公钥的完整路径。怎么操作?   需要访问的文件位置 获取方法如下: 在yaml文件中配置公钥文件名称: pem:   

    2024年02月09日
    浏览(45)
  • Spring Boot Maven package时显式的跳过test内容

    在pom.xml的编译插件部分显式的增加一段内容: maven package时可以跳过Spring Boot项目中的各种TEST代码,避免一些打包中的错误。

    2024年02月13日
    浏览(39)
  • spring-cloud-gateway版本和springboot版本不匹配

    在搭建gateway服务的时候,启动出现以下问题: Description: An attempt was made to call a method that does not exist. The attempt was made from the following location:     org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyConfiguration.buildConnectionProvider(GatewayAutoConfiguration.java:798) The following method did no

    2024年02月16日
    浏览(103)
  • Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

    在Spring Boot项目开发过程中,对于接口API发布URL访问路径,一般都是在类上标识 @RestController 或者 @Controller 注解,然后在方法上标识 @RequestMapping 相关注解,比如: @PostMapping 、 @GetMapping 注解,通过设置注解属性,发布URL。在某些场景下,我觉得这样发布URL太麻烦了,不适用,

    2024年03月22日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包