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

Spring Boot项目GET接口响应返回多余字段的原因求解

问题产生原因

Spring Boot 默认使用 Jackson 框架完成 Java 对象到 JSON 响应的序列化,该问题是 Jackson 序列化规则和实体类命名不规范共同导致的,具体原因如下:

  • Jackson 默认序列化规则:
    • 会自动将所有 public 修饰的 getter 方法识别为待序列化字段,字段名是 getter 方法去掉get前缀后首字母小写的结果
    • 被序列化注解(比如你代码中的@JsonFormat)修饰的成员变量,也会被 Jackson 识别为待序列化字段直接输出
  • 对应你的实体类代码:
    1. 私有成员变量private Date date被@JsonFormat(pattern = "yyyy-MM-dd")修饰,Jackson 会直接识别该字段,按指定格式输出,对应响应中的"date": "2021-09-12"
    2. 你定义的 public getter 方法public Date getDatetime()符合 Jackson getter 识别规则,会被自动映射为datetime字段,该方法没有加格式化注解,所以输出 Date 类型默认的 ISO 时间格式,对应响应中的"datetime": "2021-09-12T16:01:04.000+00:00"
推荐解决方案

你可以根据自己的业务需求选择以下任意一种方案修复:

  • 方案1:统一实体类 getter/setter 命名和属性名匹配,将getDatetime()改为getDate()、setDateTime()改为setDate(),此时 Jackson 只会识别到date一个字段,不会生成多余字段
  • 方案2:如果不想改动现有 getter/setter 命名,在getDatetime()方法上添加@JsonIgnore注解,让 Jackson 忽略该方法的序列化逻辑
  • 方案3:在 Booking 实体类上添加注解@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE),关闭 getter 自动识别逻辑,仅序列化显式声明了序列化注解的字段

内容的提问来源于stack exchange,提问作者ban29

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:45:00