You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:47:25