RestController返回List<POJO> JSON格式异常,求正确实现方法
解决RestController返回List生成正确JSON的问题
咱们一步步排查并解决这个问题,先从最常见的原因入手:
1. 确认JSON序列化依赖已正确配置
如果是Spring Boot项目,默认已经集成了Jackson作为JSON处理工具;但如果是手动搭建的Spring MVC项目,得确保依赖已经引入:
Maven 配置示例
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 替换为最新稳定版即可 --> </dependency>
Gradle 配置示例
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
2. 给POJO添加Getter方法(关键!)
Jackson默认通过类的Getter方法来序列化字段,你的ShiftPlannerView目前只有字段定义,没有对应的Getter,这会导致序列化时无法读取字段值,返回的JSON要么是空对象数组,要么缺失字段。修改后的POJO应该是这样:
public class ShiftPlannerView { public ShiftPlannerView() { } private Date shiftPlannerDate; private String resourceName; // 其他字段... // 为每个字段添加Getter方法 public Date getShiftPlannerDate() { return shiftPlannerDate; } public String getResourceName() { return resourceName; } // 其他字段对应的Getter... }
3. 优化日期字段的序列化格式(可选但推荐)
Date类型默认序列化后会是时间戳或不友好的格式,如果你想要返回可读性强的日期字符串(比如yyyy-MM-dd),可以用Jackson的注解配置:
import com.fasterxml.jackson.annotation.JsonFormat; public class ShiftPlannerView { public ShiftPlannerView() { } @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") // 按需设置时区和格式 private Date shiftPlannerDate; private String resourceName; // 其他字段及Getter... }
如果是Spring Boot项目,也可以通过全局配置统一设置日期格式,不用每个字段加注解:
在application.properties中添加:
spring.jackson.date-format=yyyy-MM-dd spring.jackson.time-zone=GMT+8
4. 验证结果
完成上述配置后,重启服务调用/getThisWeekPlan接口,应该就能得到标准的JSON数组了,示例格式如下:
[ { "shiftPlannerDate": "2024-05-20", "resourceName": "张三" }, { "shiftPlannerDate": "2024-05-21", "resourceName": "李四" } ]
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

