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

使用Jackson结合Lombok Builder进行JSON反序列化时遭遇字段未识别问题

解决Jackson与Lombok @Builder配合的反序列化错误

我帮你排查出问题所在了,咱们来一步步解决这个Jackson反序列化和Lombok Builder配合的bug:

问题根源

你把@JsonPOJOBuilder注解错误地标注在了Item主类上,而这个注解的正确位置是Lombok生成的ItemBuilder类上。Jackson需要这个注解来识别Builder类中没有前缀的setter方法(比如partitionvalue(String)),否则它无法将JSON字段映射到Builder的属性上,就会抛出“Unrecognized field”错误。

解决方案1:显式定义Builder类并添加@JsonPOJOBuilder

因为Lombok生成的Builder类默认是隐式的,我们可以显式定义一个空的Builder类壳,让Lombok自动增强它,同时给这个类加上@JsonPOJOBuilder(withPrefix="")注解:

@Builder
@JsonDeserialize(builder = Item.ItemBuilder.class)
public class Item {
    @Getter
    String partitionvalue;

    // 显式定义Builder类,Lombok会自动填充内部实现
    @JsonPOJOBuilder(withPrefix = "")
    public static class ItemBuilder {}
}

这样Jackson就能正确识别Builder类中的无前缀方法,将JSON的partitionvalue字段映射到Builder的对应属性上,顺利完成反序列化。

解决方案2:结合@JsonProperty注解(可选增强)

如果上面的方法还不生效,可以给Item类的字段加上@JsonProperty注解,明确指定JSON字段名,确保Jackson能精准映射:

@Builder
@JsonDeserialize(builder = Item.ItemBuilder.class)
public class Item {
    @Getter
    @JsonProperty("partitionvalue")
    String partitionvalue;

    @JsonPOJOBuilder(withPrefix = "")
    public static class ItemBuilder {}
}

补充说明

你提到的@Jacksonized注解之所以能解决问题,是因为它自动帮你完成了这些配置(包括把@JsonPOJOBuilder正确加到Builder类上),但由于它属于lombok-experimental组件,手动调整注解位置就可以达到同样的效果,不需要依赖experimental功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:04:08