如何将Spring Boot REST服务默认响应格式改为XML?
我来帮你搞定这个问题!你遇到的情况很常见——虽然加了Jackson XML的依赖能支持XML响应,但Spring Boot默认的内容协商逻辑还是会优先返回JSON,除非客户端明确指定Accept头。下面给你两种靠谱的解决方案:
方法1:通过配置文件快速修改
直接在application.properties或者application.yml里添加配置,调整默认的响应媒体类型:
如果用properties文件:
# 设置无Accept头时的默认响应类型为XML spring.mvc.contentnegotiation.default-content-type=application/xml # 可选:开启后支持通过请求参数指定格式(比如?format=json) spring.mvc.contentnegotiation.favor-parameter=true
如果用yml文件:
spring: mvc: contentnegotiation: default-content-type: application/xml favor-parameter: true # 可选,开启参数指定格式功能
配置完成后,当客户端不发送Accept头时,服务端就会默认返回XML格式的响应了。
方法2:通过Java配置自定义内容协商策略
如果需要更灵活的控制(比如自定义媒体类型优先级、扩展更多格式),可以实现WebMvcConfigurer接口,重写内容协商的配置逻辑:
import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer // 关闭路径扩展名自动匹配(比如xxx.json自动返回JSON,可选配置) .favorPathExtension(false) // 设置默认响应类型为XML .defaultContentType(MediaType.APPLICATION_XML) // 注册支持的媒体类型映射 .mediaType("xml", MediaType.APPLICATION_XML) .mediaType("json", MediaType.APPLICATION_JSON); } }
这个配置不仅明确了默认XML的规则,还清晰定义了支持的两种格式,扩展性更强。
验证效果
配置好后,用curl测试不带Accept头的请求:
curl http://localhost:8080/your-api-path
此时应该能看到XML格式的响应。如果临时需要JSON,只需加上Accept头即可:
curl -H "Accept: application/json" http://localhost:8080/your-api-path
最后再确认下你的jackson-dataformat-xml依赖是完整的,Maven依赖示例:
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
这样就能完美实现你要的默认XML响应需求啦!
内容的提问来源于stack exchange,提问作者kulatamicuda
相关产品推荐
相关产品推荐

