网站建设主机配置,郑州企业做网站h汉狮,网页qq空间在线登录,wordpress更换服务器springboot 的 路径匹配 和 内容协商
对于路径匹配#xff0c;自己的总结就是#xff1a; 以前路径匹配时默认不检查后缀#xff0c;http://localhost:8080/aaa.json 可以直接访问到 RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。
内容协商的理解总结自己的总结就是 以前路径匹配时默认不检查后缀http://localhost:8080/aaa.json 可以直接访问到 RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。
内容协商的理解总结 就是通过添加 xml 依赖或者在yml配置文件中进行一些配置来指定访问的方法响应回来的数据类型比如 json、xml 等。
★ 路径匹配 以前路径匹配时默认不检查后缀。比如请求 GET /users.jsonSpring 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?formatjson表明希望服务器生成JSON响应。提示关于内容协商的深入介绍和详细示例可以参考《轻量级Java Web企业应用实战》的6.5.8小节。代码演示
需求根据设置Accept请求头来演示返回的响应类型。
返回json格式
添加注解 RestController 返回的就是 json 格式的数据
返回 xml 格式
要返回xml 格式的数据需要添加xml 的依赖
如图代码没变如果添加了这个 xml 依赖 访问这个方法返回的自己就变成了 xml 格式的响应了。 postman 测试 ★ 内容协商的推荐方式
- 优先使用Accept请求头。- 如果不设置合适的Accept请求头建议使用额外的format参数来告诉服务器生成的响应类型比如”GET /users?formatjson“告诉服务器生成JSON响应。在Contentnegotiation类的源代码中包含如下行- private boolean favorParameter false;
表明Spring Boot默认关闭了使用额外的参数来指定响应类型。可通过如下配置来启用这个 -- 使用额外的参数来指定响应类型
spring.mvc.contentnegotiation.favor-parametertrue# 设置使用额外的fkft请求参数代替原来默认的format请求参数来指定响应的内容类型
spring.mvc.contentnegotiation.parameter-namefkft【为了生成XML响应首先需要让应用增加XML支持比如Jackson Dataformat XML】代码演示
需求通过使用额外的参数来指定响应类型
配置这个就能启动 【使用额外参数来执行响应类型】的功能。默认是关闭的需要在配置中启动。 这种就是内容协商。
#配置通过使用额外的参数来指定响应类型
spring:mvc:contentnegotiation:favor-parameter: true演示这个功能 # 设置使用额外的 ljh 请求参数名代替原来默认的format请求参数名来指定响应的内容类型 spring.mvc.contentnegotiation.parameter-nameljh 内容协商的理解总结就是通过添加 xml 依赖或者在yml配置文件中进行一些配置来指定访问的方法响应回来的数据类型比如 json、xml 等。
★ 强制开启基于后缀匹配的内容协商。
需要同时开启两个设置- 路径匹配时启用”后缀匹配“不检查后缀- 内容协商时使用后缀添加如下配置
# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping(/users)
spring.mvc.pathmatch.use-suffix-patterntrue
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extensiontrue▲ 更安全的配置在路径匹配时后缀匹配只匹配那些已经注册过的后缀类型比如.json、.xml等但对于.exe这种未知的后缀那就依然不匹配。# 设置路径匹配时忽略检查后缀
spring.mvc.pathmatch.use-suffix-patterntrue
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extensiontrue
# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-patterntrue
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdowntext/markdown代码演示
# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping(/users)
spring.mvc.pathmatch.use-suffix-patterntrue
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extensiontrue演示通过 后缀名 来返回指定的响应类型。强制开启基于后缀匹配的内容协商 如图 后缀为 .xml 返回的响应类型就是 xml 后缀为 .json 返回的响应类型就是 json 后缀为 .abc 乱写的返回的响应类型就是原本不添加后缀的响应类型 因为后缀乱写都能匹配到所以安全起见需要再配置一些东西
# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-patterntrue
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdowntext/markdown通过配置这个 spring.mvc.pathmatch.use-registered-suffix-patterntrue设置只匹配已注册的后缀类型后乱写后缀就匹配不到方法了安全性提高了一点
这个是自定义的拓展名
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
# 指定 .markdown 后缀 和 text/markdown 之间的对应关系
spring.mvc.contentnegotiation.media-types.markdowntext/markdown自定义的拓展名不过应该是没有这个text/markdown与之对应所以报错