Postman获取接口响应不全,移除@JsonIgnore后Dish列表返回异常截断
问题结论
该问题不是Controller层缺陷导致,核心原因是Jackson未正确配置Java 8时间类型LocalDateTime的序列化逻辑,序列化过程抛出异常导致响应输出被中途截断,最终返回不完整的JSON内容。
现象解释
- 未加
@JsonIgnore时返回的截断内容,并非接口只查询到1条菜品数据:Jackson序列化JSON时是直接向HTTP响应输出流逐段写入内容,当序列化到第一条菜品的updateDate字段时触发序列化异常,输出流直接中断,已经写入缓冲区的半截JSON(也就是你看到的只有1条数据、字段名后没有值的非法结构)就被直接返回给了客户端。 - 给
updateDate加上@JsonIgnore后,Jackson序列化时直接跳过该字段,不会触发时间类型的序列化异常,所有菜品数据就能正常完整返回。
注意:你在字段上加的
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")仅对Spring的请求参数绑定(比如表单提交、URL参数传值)生效,完全不影响Jackson的JSON序列化/反序列化逻辑,无法解决这个问题。
修复方案
按以下步骤处理即可解决:
- 确认依赖:如果是Spring Boot项目,引入
spring-boot-starter-web时默认已经集成了jackson-datatype-jsr310(Java 8时间类型的Jackson支持模块),无需额外引入;如果是非Spring Boot项目,手动补充该Jackson模块的依赖即可。 - 字段级配置:移除
updateDate字段上的@JsonIgnore注解,替换为Jackson的时间格式化注解:
@Column(name = "update_date", nullable = false) @NotNull @JsonFormat(pattern = "yyyy-MM-dd HH:mm") private LocalDateTime updateDate;
- 全局配置(可选):如果需要统一项目中所有
LocalDateTime类型的JSON格式,无需在每个字段上加注解,直接在Spring配置文件中添加全局Jackson配置即可,properties格式配置示例:
spring.jackson.date-format=yyyy-MM-dd HH:mm spring.jackson.serialization.write-dates-as-timestamps=false
- 额外校验:确认数据库中所有菜品记录的
update_date字段实际没有null值,你在实体字段上标记了@NotNull,如果查询出null值也可能触发序列化异常中断响应。
内容的提问来源于stack exchange,提问作者VadiMayer
相关产品推荐
相关产品推荐

