Spring Boot 3默认恢复JSON格式:移除XML依赖后仍返回XML
问题解决:恢复Spring Boot接口默认JSON返回格式
一、先确认Jackson XML依赖是否彻底移除
你的问题大概率是依赖没清干净——可能是其他依赖间接引入了jackson-dataformat-xml,导致XML消息转换器还在生效。
- 执行命令
mvn dependency:tree,查看完整依赖树,搜索jackson-dataformat-xml,确认是否被其他依赖(比如某些starter)间接引入。 - 如果发现间接依赖,直接在pom.xml里对应的依赖下添加排除规则:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </exclusion> </exclusions> </dependency>
- 再执行
mvn clean install -U,强制更新依赖并重新构建。
二、强制指定默认返回格式为JSON
如果依赖确实清理干净但还是返回XML,直接通过配置锁死默认响应类型:
全局配置(推荐)
在application.properties里添加:
spring.mvc.contentnegotiation.default-content-type=application/json spring.mvc.contentnegotiation.favor-path-extension=false
或者用application.yml格式:
spring: mvc: contentnegotiation: default-content-type: application/json favor-path-extension: false
这个配置会让接口默认返回JSON,同时关闭路径后缀(比如.xml)的格式匹配优先级。
局部配置(控制器/方法级别)
如果只想针对某个控制器生效,直接在类上指定produces:
import org.springframework.http.MediaType; // ... 其他导入 @RestController @RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE) public class UserResource { // 你的接口代码保持不变 }
也可以单独给某个接口方法添加:
@GetMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE) public List<User> RetrieveUsers() { return service.findAll(); }
三、检查客户端请求头
有时候是客户端请求时带了Accept: application/xml的请求头,服务器会优先返回XML。你可以用浏览器开发者工具、Postman等工具查看请求头,如果是这个原因,要么修改客户端的请求头,要么通过上面的全局配置强制忽略Accept头的优先级。
内容的提问来源于stack exchange,提问作者cynthsbeath
相关产品推荐
相关产品推荐

