org已经备案的网站,广告设计主要是做什么,关于网站开发的步骤,wordpress如何修改后台登录地址这是我的专栏《学透Spring Boot》的第18篇文章#xff0c;想要更系统的学习Spring Boot#xff0c;请访问我的专栏#xff1a;学透 Spring Boot_postnull咖啡的博客-CSDN博客。
目录
返回不同格式的响应
Spring Boot的内容协商
控制器不用任何修改
启动内容协商配置
访…这是我的专栏《学透Spring Boot》的第18篇文章想要更系统的学习Spring Boot请访问我的专栏学透 Spring Boot_postnull咖啡的博客-CSDN博客。
目录
返回不同格式的响应
Spring Boot的内容协商
控制器不用任何修改
启动内容协商配置
访问应用
获取XML格式的响应
添加XML的支持
设置变量名
配置其它的格式
总结 Spring MVC中会根据GetMapping或者RequestMapping中的路径匹配对应的HTTP请求到指定的方法去这个我们不再累述。 今天我们玩点更特别的。 返回不同格式的响应
有时候我们希望我们的响应既可以返回json格式也可以返回xml格式。 返回什么格式由我们的参数来决定。
最傻的办法是在Controller中解析format参数然后用XML或者Json解析器把对象转换成json或者XML格式。 这样当然可以但是有点不够优雅。 Spring Boot的内容协商
好在Spring Boot已经帮我实现了这样的特性支持不同格式的响应。 控制器不用任何修改
控制器不用做任何修改甚至连format参数都不用加。 启动内容协商配置
application.properties
spring.mvc.contentnegotiation.favor-parametertrue 访问应用
然后我们可以带参数获取不同的响应。
http://localhost:8080/buyBike?formatjson
返回了json响应 不带format参数返回的也是json。这是默认格式。 获取XML格式的响应
然后我们再获取xml响应http://localhost:8080/buyBike?formatxml
非常可惜情况有点异常。报错了。 查看日志发现支持的格式中居然没有application/xml. 这是怎么回事呢
我们debug看看启动时看看WebMvcConfigurer Spring MVC配置器加载了哪些http消息转换器。 要深入了解HTTP消息转换器请看我上一篇的文章学透Spring Boot — 017. 魔术师—Http消息转换器-CSDN博客 可以看到SpringBoot只配置了json的转换器。 我们再看看jackson的自动配置类 可以看到要配置Jackson XML就classpath下必须有XmlMapper类。 很可惜Spring Boot默认没有引入这个类。 添加XML的支持
为了支持XML的响应我们需要引入XML相关的依赖。 这时候有了XmlMapper类我们的Jackson也会去自动配置XML转换器了。 我们重启服务debug再看看加载的消息转换器列表。
下图可以看出Jackson XML的消息转换器已经自动配置并加载了。 再次访问成功返回xml的响应 设置变量名
其实我们还可以做得在多一点。比如我不喜欢format这个变量我想改成good
spring.mvc.contentnegotiation.parameter-namegood
完全OK 配置其它的格式
如果我还想配置其它的格式也是可以的。比如我们前面文章自主研发的格式“hehe/nba”
spring.mvc.contentnegotiation.media-types.hehe-nbchehe/nba 访问有问题可能是因为你的格式不在支持的列表中 RequestResponseBodyMethodProcessor : Using hehe/nba;charsetUTF-8, given [hehe/nba] and supported [application/json, application/*json, application/xml;charsetUTF-8, text/xml;charsetUTF-8, application/*xml;charsetUTF-8, hehe/nba;charsetUTF-8, hehe/nba] 而且我们开发的hehe/nba格式暂时只处理了Car类。 总结
本文我们自己通过内容协商实现了返回多种格式响应的需求而且不用改动任何业务代码只需做少量配置即可。另外我们也通过引入XML的依赖实现了Spring Boot对Jackson XML的自动配置。