梅州市建设培训中心网站,仿站怎么做,wordpress电子书与公众号,毕设做网站和app#x1f600;前言 本篇博文是关于客户端接收能力不同#xff0c;SpringBoot 返回不同媒体类型的数据如何处理的说明#xff0c;希望你能够喜欢#x1f60a; #x1f3e0;个人主页#xff1a;晨犀主页 #x1f9d1;个人简介#xff1a;大家好#xff0c;我是晨犀#… 前言 本篇博文是关于客户端接收能力不同SpringBoot 返回不同媒体类型的数据如何处理的说明希望你能够喜欢 个人主页晨犀主页 个人简介大家好我是晨犀希望我的文章可以帮助到大家您的满意是我的动力 欢迎大家这里是CSDN我总结知识的地方欢迎来到我的博客感谢大家的观看 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦 文章目录 返回格式数据处理处理JSON应用实例 内容协商基本介绍内容协商-应用实例注意事项和使用细节代码示例完成测试注意 总结 返回格式数据处理
客户端接收能力不同SpringBoot 需要返回不同媒体类型的数据以便客户端处理。
处理JSON
需求说明: 演示返回JSON 格式数据 应用实例
SpringBoot 支持返回JSON 格式数据在启用WEB 开发场景时已经引入了相关依赖 创建com/nlc/web/controller/ResponseController.java
Controller
public class ResponseController {//返回Monster数据-要求以json格式返回GetMapping(/get/monster)ResponseBodypublic Monster getMonster() {//说明//开发中, monster对象是从DB获取-这里模拟一个monster对象Monster monster new Monster();monster.setId(100);monster.setName(奔波霸);monster.setAge(200);monster.setIsMarried(false);monster.setBirth(new Date());Car car new Car();car.setName(奔驰);car.setPrice(222.2);monster.setCar(car);return monster;}
}Postman 完成测试 Debug 一下monster 对象以Json 格式返回 内容协商
基本介绍
根据客户端接收能力不同SpringBoot 返回不同媒体类型的数据比如: 客户端Http 请求Accept: application/xml 则返回xml 数据客户端Http 请求Accept: application/json 则返回json 数据比如下面的示意图 内容协商-应用实例
● 需求说明: 使用Postman 发送Http 请求根据请求头不同返回对应的json 数据或者xml数据, 如图 在pom.xml 增加处理xml 的依赖记得刷新maven
!-- 引入支持返回xml 数据格式--
dependencygroupIdcom.fasterxml.jackson.dataformat/groupIdartifactIdjackson-dataformat-xml/artifactId
/dependency使用Postman 发出不同的Http Header , 可以看到返回对应的数据格式(说明: 测试前请重启一把项目) 切换Postman 不同的Accept 类型, 来Debug 源码, 看看对应的JsonGenerator 类型 使用浏览器请求为什么会返回xml 数据分析,而不是json?
注意事项和使用细节
1.Postman 可以通过修改Accept 的值来返回不同的数据格式
2.对于浏览器我们无法修改其Accept 的值怎么办? 解决方案: 开启支持基于请求参数的内容协商功能
代码示例
修改application.yml, 开启基于请求参数的内容协商功能
spring:mvc:
# static-path-pattern: /res/** #修改静态资源访问的路径/前缀hiddenmethod:filter:enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能contentnegotiation:favor-parameter: true #开启基于请求参数的内容协商功能web:resources:#修改/指定 静态资源的访问路径/位置static-locations: [classpath:/img/,classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/] #String[] staticLocations完成测试 注意
参数format 是规定好的 在开启请求参数的内容协商功能后SpringBoot 底层ParameterContentNegotiationStrategy 会通过format 来接收参数然后返回对应的媒体类型/数据格式, 当然formatxx 这个xx 媒体类型/数据格式是SpringBoot 可以处理的才行不能乱写. 修改application.yml指定一个内容协商的参数名
spring:mvc:hiddenmethod:filter:enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能contentnegotiation:favor-parameter: true #开启基于请求参数的内容协商功能parameter-name: myformat #指定一个内容协商的参数名web:resources:#修改/指定 静态资源的访问路径/位置static-locations: [classpath:/img/,classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/] #String[] staticLocations
总结
客户端接收能力不同SpringBoot 需要返回不同媒体类型的数据。加入依赖记得刷新maven否则idea识别不到就会报错。内容协商的参数名可以自己指定一个需要配置。 文章到这里就结束了如果有什么疑问的地方请指出诸大佬们一起来评论区一起讨论 希望能和诸大佬们一起努力今后我们一起观看感谢您的阅读 如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力