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

为什么Jackson的@JsonAlias注解搭配Lombok使用时无法生效?

@JsonAlias与Lombok搭配不生效原因及解决方案

根因说明

该问题的核心是 Lombok默认不会将字段上的Jackson注解拷贝到自动生成的构造方法入参、Setter方法参数、Builder入参中,结合你使用的注解组合,具体触发逻辑如下:

  • @JsonAlias注解默认仅作用于字段本身,当Jackson反序列化选择通过构造方法注入属性时,会读取构造入参上的注解配置,而Lombok生成的@AllArgsConstructor全参构造的入参上没有携带@JsonAlias,无法匹配到string1、string2的JSON字段,就会给对应属性赋值为null。
  • 额外添加的@Builder注解会隐式触发Jackson的Builder模式反序列化逻辑,优先级高于Setter注入,进一步导致字段上的@JsonAlias无法被读取。

解决方案

方案1:调整注解组合,让反序列化走Setter注入

移除@AllArgsConstructor注解,仅保留@NoArgsConstructor + @Setter + @Getter,Jackson会先通过无参构造实例化对象,再通过Setter赋值,此时可以直接读取字段上的@JsonAlias配置:

@Getter
@Setter
@Builder
@NoArgsConstructor
public class JsonFilter {
    @JsonAlias({"string1", "string2"})
    private String string;

    // 手动补全Builder需要的全参构造,避免编译报错
    private JsonFilter(String string) {
        this.string = string;
    }
}

方案2:配置Lombok自动拷贝Jackson注解

在项目根目录下新建lombok.config配置文件,添加如下规则,指定Lombok生成代码时自动拷贝@JsonAlias注解到对应参数上:

lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonAlias

配置生效后,原有代码无需修改即可正常识别别名。

方案3:手动为构造入参添加注解

如果不想调整全局配置,也可以手动编写全参构造,为对应入参添加@JsonAlias注解:

@Getter
@Setter
@Builder
@NoArgsConstructor
public class JsonFilter {
    @JsonAlias({"string1", "string2"})
    private String string;

    public JsonFilter(@JsonAlias({"string1", "string2"}) String string) {
        this.string = string;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:00