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

@Accessors(fluent = true)无法与Jackson协同工作的解决方法

问题根因

@Accessors(fluent = true) 会改写Lombok生成访问器方法的默认命名规则:

  • 移除getter方法的get/is前缀、setter方法的set前缀,例如此处identification字段生成的getter方法名从标准的getIdentification()变为identification(),setter方法名从setIdentification(String)变为identification(String)
  • Jackson默认的Bean序列化机制依赖get/set前缀识别类的可访问属性,没有对应前缀的方法不会被判定为属性访问入口,因此扫描不到AccountDTO的任何可序列化属性,最终抛出无序列化器的异常。
可行解决方案

根据项目使用场景选以下任意一种即可:

  • 单类适配:给类添加@JsonAutoDetect注解,修改当前类的属性识别规则
    @Data
    @Builder
    @Accessors(fluent = true)
    // 配置Jackson直接按字段识别属性,跳过getter/setter前缀校验
    @JsonAutoDetect(
        fieldVisibility = JsonAutoDetect.Visibility.ANY,
        getterVisibility = JsonAutoDetect.Visibility.NONE,
        setterVisibility = JsonAutoDetect.Visibility.NONE
    )
    public class AccountDTO implements Serializable {
        private String identification;
    }
    
  • 全局适配:如果项目中大量使用fluent风格访问器,直接在Spring Boot配置中全局修改Jackson的属性识别规则,无需逐个类加注解
    @Configuration
    public class JacksonConfig {
        @Bean
        public Jackson2ObjectMapperBuilderCustomizer fluentAccessorCustomizer() {
            return builder -> {
                builder.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
                builder.visibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
                builder.visibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
            };
        }
    }
    
  • 轻量适配:如果类字段数量少,也可以直接给需要序列化的字段添加@JsonProperty注解,显式标记为序列化属性
    @Data
    @Builder
    @Accessors(fluent = true)
    public class AccountDTO implements Serializable {
        @JsonProperty
        private String identification;
    }
    

内容的提问来源于stack exchange,提问作者Melad Basilius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:24:23