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

使用Lombok@Value注解类时Jackson无法反序列化简单JSON如何解决

问题原因
  • @Value是Lombok用于生成不可变类的注解,会将类中所有字段设为final,仅生成私有全参构造方法,不会生成公共无参构造方法。
  • @Builder注解默认不会生成Jackson可识别的反序列化创建器,Jackson反序列化时默认需要公共无参构造方法实例化对象,或明确标注的创建器来通过全参构造/构造器模式创建对象,两者同时使用时Jackson找不到符合要求的实例创建入口,就会抛出对应异常。
解决方案

提供三种可选方案,可根据业务场景选择:

  1. 最简适配方案:在类上添加Lombok的@Jacksonized注解,该注解专门适配@Builder+@Value的使用场景,会自动生成Jackson反序列化所需的构造器适配逻辑,无需修改其他代码:
@Value
@Builder
@Jacksonized
public class RecipeListRemoveDTO {
    int recipeListId;
}
  1. 手动标注构造器方案:给类添加@JsonCreator注解标注的全参构造方法,同时给每个参数添加@JsonProperty指定对应JSON字段名,适合字段数量较少的场景:
@Value
@Builder
public class RecipeListRemoveDTO {
    int recipeListId;

    @JsonCreator
    public RecipeListRemoveDTO(@JsonProperty("recipeListId") int recipeListId) {
        this.recipeListId = recipeListId;
    }
}
  1. 替换为可变类方案:如果业务不需要不可变类特性,可将@Value替换为@Data注解,@Data会自动生成公共无参构造和Getter/Setter,Jackson可直接完成反序列化:
@Data
@Builder
public class RecipeListRemoveDTO {
    int recipeListId;
}

内容的提问来源于stack exchange,提问作者uniqueuser-programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:57:03