本文基于 SpringBoot 2.6.3 版本,spring-webmvc 5.3.15版本
官方文档:https://docs.spring.io/spring-boot/docs/2.6.3/reference/htmlsingle/#web.servlet.spring-mvc.content-negotiation
默认情况下,SpringBoot中SpringMVC接口返回的数据是json格式,但有些时候同样的数据我们可能需要根据请求来返回不同的格式。即同一个接口可以返回json格式,又可以返回xml格式。
需要额外添加如下依赖:
com.fasterxml.jackson.dataformat jackson-dataformat-xml
默认情况下SpringMVC根据Accept请求头来确定返回什么格式给客户端。所以在添加了jackson-dataformat-xml直接在浏览器访问接口返回的是xml格式的数据。如果想要返回json格式,可以手动设置Accept为application/json。
但如果http客户端无法设置Accept,可以使用请求参数format=json来指定返回的数据格式,优先级高于Accept,但是默认没有开启,需要添加如下参数开启:
spring.mvc.contentnegotiation.favor-parameter=true
在spring-webmvc 5.2.4之前的版本中支持根据url后缀来返回数据格式,但是该版本开始,已经被标记过时,不推荐该方式。
WebMvcConfigurationSupport中会自己推断支持哪些类型,但是对于默认不支持的类型则需要自己通过如下属性设置支持哪些类型. 和配置解析器. 如果key相同则会覆盖推断出来的.
spring.mvc.contentnegotiation.media-types.customType=customType



