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

Spring Boot中如何让Jackson保留属性名的前导下划线

问题原因

出现重复字段的核心原因是Jackson默认同时序列化带@JsonProperty注解的私有字段和符合JavaBean命名规范的public getter方法:

  • 私有字段_links加了@JsonProperty("_links"),会被序列化为_links
  • public gettergetLinks()没有指定序列化名称,会按JavaBean规则序列化为links
    两者同时生效就出现了两个内容相同、名称不同的属性,你之前尝试的命名策略配置是全局统一修改属性命名规则,无法解决这种字段和getter不匹配导致的重复序列化问题。

解决方案

方案1:Spring Boot全局配置Jackson(最简,无需修改生成代码)

直接在application.yml或application.properties中添加如下配置,关闭Jackson对无注解getter/setter的自动检测:

spring:
  jackson:
    mapper:
      AUTO_DETECT_GETTERS: false
      AUTO_DETECT_SETTERS: false

配置后Jackson只会序列化带@JsonProperty注解的字段/getter,不会自动把getLinks()识别为links属性,完美保留你需要的_links属性名。

方案2:调整swagger-codegen生成规则(治本,避免后续生成代码重复出现问题)

修改swagger-codegen的构建配置,开启getter方法的JsonProperty注解生成能力,以maven插件为例:

<configuration>
  <additionalProperties>
    <jacksonAnnotation>true</jacksonAnnotation>
    <generateJsonPropertyForGetters>true</generateJsonPropertyForGetters>
  </additionalProperties>
</configuration>

配置后重新生成的代码中,getLinks()方法会自动带上@JsonProperty("_links")注解,Jackson会把getter也映射到_links字段,不会生成多余的links属性。

方案3:临时手动修改生成代码

如果只需要快速验证效果,可以直接给生成的get方法添加@JsonIgnore注解,让Jackson忽略这个getter:

@Schema(
    description = ""
)
@Valid
@JsonIgnore
public LinksUnderscoreType getLinks() {
    return this._links;
}

该方案每次重新生成代码都需要手动修改,适合临时调试使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:01