当前位置:网站首页>13. 内容协商
13. 内容协商
2022-08-10 23:35:00 【要学就学灰太狼】
13.1 基本介绍
根据客户端接收能力不同,SpringBoot 返回不同媒体类型的数据
比如:
● 客户端 Http 请求
Accept: application/xml
则返回 xml 数据
● 客户端 Http 请求Accept: application/json
则返回 json 数据比如下面的示意图
13.2 内容协商-应用实例
- 需求说明:
- 使用Postman发送Http请求
- 根据请求头不同,返回对应的 json数据 或者 xml 数据
- 如下图所示
- 在 pom.xml 增加处理 xml 的依赖
<!--引入处理xml的依赖-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
使用Postman发出不同的 Http Header ,可以看到返回对应的数据格式 (特别说明:测试前请重启一把项目)
切换 Postman 不同的 Accept 类型,来 Debug 源码,看看对应的 JsonGenerator 类型
----- Accept 切换成 application/xml 进行Degug -----
- 使用浏览器请求,为什么会返回 xml 数据,而不是 json ?
13.3 注意事项和使用细节
Postman 可以通过修改 Accept 的值,来返回不同的数据格式
对于浏览器,我们无法修改其 Accept 的值,怎么办?
=> 解决方案:开启支持基于请求参数的内容协商功能
- 修改 application.yml,开启基于请求参数的内容协商功能
spring:
mvc:
# static-path-pattern: /xjsres/** #修改静态资源访问的路径/前缀
hiddenmethod:
filter:
enabled: true #启用了 HiddenHttpMethodFilter 支持 rest风格请求
view: # 配置了视图解析器
suffix: .html
prefix: / # 这里需要注意 前缀prefix 要考虑 static-path-pattern 的配置
contentnegotiation:
favor-parameter: true # 开启基于请求参数的内容协商功能
web:
resources:
#修改/指定 静态资源的 存放路径/位置 # String[] staticLocations
#注意:配置了 static-locations 原来的访问路径就被覆盖了,如果需要保留,要再指定一下
static-locations: ["classpath:/xjsimg/", "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"]
- 完成测试
- 注意,参数
format
是规定好的 , 在开启请求参数的内容协商功能后,SpringBoot 底层ParameterContentNegotiationStrategy
会通过 format 来接收参数,然后返回对应的 媒体类型/数据格式,当然format=xx
这个 xx 媒体类型/数据格式 是 SpringBoot 可以处理的才行,不能乱写
- 也可以自定义配置 内容协商的请求参数名
spring:
mvc:
# static-path-pattern: /xjsres/** #修改静态资源访问的路径/前缀
hiddenmethod:
filter:
enabled: true #启用了 HiddenHttpMethodFilter 支持 rest风格请求
view: # 配置了视图解析器
suffix: .html
prefix: / # 这里需要注意 前缀prefix 要考虑 static-path-pattern 的配置
contentnegotiation:
favor-parameter: true # 开启基于请求参数的内容协商功能
parameter-name: xjsformat # 我们自定义一个 内容协商的参数名 [默认是format]
web:
resources:
#修改/指定 静态资源的 存放路径/位置 # String[] staticLocations
#注意:配置了 static-locations 原来的访问路径就被覆盖了,如果需要保留,要再指定一下
static-locations: ["classpath:/xjsimg/", "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"]
边栏推荐
- 《剑指offer》题解——week2(持续更新)
- Talking about jsfuck coding
- Promote the high-quality development of denim clothing
- 点云中的一些名词解释
- proxy代理服务_2
- sklearn.datasets.make_circles
- CDN原理与应用简要介绍
- 产品web3d效果动态展示更生动形象
- 关于弱监督学习的详细介绍——A Brief Introduction to Weakly Supervised Learning
- Starting a new journey - Mr. Maple Leaf's first blog
猜你喜欢
iNFTnews | In the Web3 era, users will have data autonomy
C3604环保黄铜带
Excel English automatic translation into Chinese tutorial
[C] the C language program design, dynamic address book (order)
promise详解
互联网中不可缺失的网络优化:“App与Server的交互依赖于网络”
高性能MySQL核心整理强势来袭
Deep Learning Transformer Architecture Analysis
String
Doris建表注意事项,实时数仓的同学记得收藏
随机推荐
mysql数据库高级操作
Metasploit——客户端渗透
大厂面试热点:“热修复机制及常见的几个框架介绍”
HFCTF 2021 Internal System writeup
3d虚拟现实数字化展厅给予参观者充分的交互性和空间感
工作记录:DB2查询数据,当字段为空时,赋值
多语种翻译-多语种翻译软件免费
正交基(线性代数)
22年全国程序员1月薪资出炉,才知道年薪 40 万以上的有这么多?
sklearn.datasets.make_circles
PlaidCTF 2022 Amongst Ourselves: Shipmate writeup
Kubernetes 维护技术分享
点云中的一些名词解释
u盘数据不小心删除怎么恢复,u盘数据删除如何恢复
线程相关知识点
CDN原理与应用简要介绍
Which translation software is more accurate [Free]
花环灯问题
矩阵的迹(详解)
鲜花线上销售管理系统的设计与实现