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

Spring Boot项目中使用Jackson映射时出现属性Getter定义冲突的问题解决咨询

解决Jackson Getter定义冲突的问题

嘿,这个问题我之前踩过坑!本质是Jackson自动识别属性的逻辑和你手动指定的@JsonProperty注解闹矛盾了。Jackson默认会根据Getter方法名推断对应的JSON属性,但你给字段加的@JsonProperty(比如"TSContact")和另一个字段的Getter(getLocationContact)被Jackson错误关联到了同一个属性上——大概率是默认命名策略对大小写、前缀的处理搞混了。

给你几个靠谱的解决办法:

方案1:把@JsonProperty移到Getter上

直接把注解从字段搬到对应的Getter方法,明确告诉Jackson每个Getter对应哪个JSON属性,彻底消除歧义:

@Getter @Setter 
public class MyClassDto { 
    private List<Contact> tsContact = new ArrayList<>(); 
    private List<Contact> locationContact = new ArrayList<>(); 

    @JsonProperty("TSContact")
    public List<Contact> getTsContact() {
        return tsContact;
    }

    @JsonProperty("LocationContact")
    public List<Contact> getLocationContact() {
        return locationContact;
    }
}

方案2:配置Jackson的命名策略

如果不想逐个改注解,直接给Jackson指定合适的命名策略就行。在Spring Boot里,直接在application.properties加一行:

spring.jackson.property-naming-strategy=PASCAL_CASE_TO_CAMEL_CASE

要是你用自定义的ObjectMapper,就这么写:

ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE);

这个策略会自动把JSON里的帕斯卡命名(比如TSContact)转换成Java的驼峰命名(tsContact),刚好匹配你的字段名,Jackson就能正确对应Getter和属性了。

方案3:用@JsonIgnore临时规避(不推荐)

如果只是临时救急,可以给其中一个Getter加@JsonIgnore,但注意这会让对应的属性无法被序列化/反序列化,只适合特殊场景:

@Getter @Setter 
public class MyClassDto { 
    @JsonProperty("TSContact") 
    private List<Contact> tsContact = new ArrayList<>(); 
    @JsonProperty("LocationContact") 
    @JsonIgnore // 注意:加了这个,locationContact就不会被Jackson处理了
    private List<Contact> locationContact = new ArrayList<>(); 
}

小提醒:检查Lombok生成的方法

你用了Lombok的@Getter @Setter,最好确认下编译后的class文件里,Getter的命名是不是getTsContact和getLocationContact——要是Lombok生成的方法名不符合预期,也会让Jackson认错属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:32:29