Spring Boot 接口返回的JSON数据结果是Xml格式

本文解决了SpringBoot项目中因引入jackson-dataformat-xml包而导致接口返回数据格式从JSON变为XML的问题。通过排除该依赖并指定接口返回类型为JSON,确保了数据格式的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 接口返回的JSON数据结果是Xml格式

问题解决:
排查出由于引入 jackson-dataformat-xml包导致。
解决办法:

  1. 去掉 jackson-dataformat-xml引用
  2. 在controller层接口处 添加produces属性指定返回格式
@RequestMapping(value = "/..",produces = {"application/json;charset=utf-8"})
  1. 配置文件
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/> 

<bean id="contentNegotiationManager" 
      class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="defaultContentType" value="application/json" /> 
</bean> 

问题原因:
查看org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor类中,218 - 264行代码。debug之后发现:

  • 未引入时
    返回数据格式只有JSON格式
    返回数据格式中只有JSON
  • 引入该包时
    返回数据格式增加了三个
    返回数据格式中增加三个XML格式

网上搜索结果解释为:
由接口后缀推断出了请求的requestedMediaTypes是application/json,而没有任何后缀,只能推断出来都接受(/)。由于不引入该包时,并不包括application/xml,所以无论什么接口,能返回json的都返回json。
加上依赖之后,

### Spring Boot 返回 JSON 数据的实现方法 在 Spring Boot 中,返回 JSON 数据是一个非常常见的需求。Spring Boot 内置了对 JSON 的支持,通常通过 Jackson 库来实现对象与 JSON 之间的转换[^5]。以下是具体的实现步骤和示例代码: #### 1. 创建 Spring Boot 项目 确保你的项目中已经引入了 `spring-boot-starter-web` 依赖,该依赖包含了处理 HTTP 请求和响应所需的组件。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` #### 2. 定义数据模型类 创建一个 Java 类来表示需要返回数据结构。例如,定义一个 `User` 类: ```java package com.example.demo.model; public class User { private String username; private String email; private int age; // 构造函数 public User(String username, String email, int age) { this.username = username; this.email = email; this.age = age; } // Getter 和 Setter 方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` #### 3. 创建控制器类 编写一个控制器类来处理 HTTP 请求,并返回 JSON 数据Spring Boot 默认会将对象自动转换为 JSON 格式。 ```java package com.example.demo.controller; import com.example.demo.model.User; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class UserController { @GetMapping("/user") public User getUser() { return new User("john_doe", "[email protected]", 30); } } ``` 在上述代码中,`@RestController` 注解用于标记这是一个 REST 风格的控制器,而 `@GetMapping("/user")` 表示当访问 `/api/user` 路径时,会调用 `getUser` 方法并返回一个 `User` 对象。Spring Boot 会自动将该对象序列化为 JSON 格式。 #### 4. 配置 application.yml 文件 如果需要自定义服务器端口或上下文路径,可以在 `application.yml` 文件中进行配置: ```yaml server: port: 8080 servlet: context-path: / ``` #### 5. 测试接口 启动 Spring Boot 应用程序后,访问以下 URL 来测试接口: ``` http://localhost:8080/api/user ``` 返回JSON 数据应如下所示: ```json { "username": "john_doe", "email": "[email protected]", "age": 30 } ``` #### 6. 手动使用 ObjectMapper(可选) 如果需要手动控制 JSON 的序列化过程,可以使用 Jackson 提供的 `ObjectMapper` 类: ```java import com.fasterxml.jackson.databind.ObjectMapper; @RestController @RequestMapping("/api") public class UserController { private final ObjectMapper objectMapper = new ObjectMapper(); @GetMapping(value = "/user", produces = "application/json") public String getUser() throws Exception { User user = new User("john_doe", "[email protected]", 30); return objectMapper.writeValueAsString(user); } } ``` 这种方式允许开发者对 JSON 数据的生成过程有更多的控制权。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值