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

使用JsonItemReader与JacksonJsonObjectReader时遭遇UnrecognizedPropertyException

问题分析与解决方案

你遇到的问题本质是Lombok生成的getter/setter没有被Jackson正确识别,而非缺少核心Jackson配置,但可以通过调整Jackson或Lombok的配置彻底解决,不用手动添加@JsonProperty注解或编写getter/setter方法。

核心原因

Lombok的@Data注解默认生成符合JavaBean规范的getter/setter(比如字段id对应getId()/setId()),但Spring Batch的JsonItemReader使用的ObjectMapper实例可能被Spring容器自定义过,导致Jackson没有自动识别Lombok生成的方法,或者存在字段名与反序列化规则不匹配的情况。

可行的配置方案

方案1:配置Jackson自动识别Lombok方法

方式A:通过配置文件全局生效

在Spring Boot项目的application.yml或application.properties中添加Jackson可见性配置:

spring:
  jackson:
    visibility:
      field: any
      getter: any
      setter: any

或者properties格式:

spring.jackson.visibility.field=any
spring.jackson.visibility.getter=any
spring.jackson.visibility.setter=any

该配置会让Jackson忽略JavaBean规范的严格检查,直接访问类字段或识别Lombok生成的方法。

方式B:为Spring Batch注入自定义ObjectMapper

如果Spring Batch使用的ObjectMapper是独立实例,可以手动配置并注入:

@Configuration
public class BatchConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 允许Jackson访问私有字段及Lombok生成的getter/setter
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.ANY);
        return objectMapper;
    }

    @Bean
    public JsonItemReader<CustomerDTO> jsonItemReader(ObjectMapper objectMapper) {
        return new JsonItemReaderBuilder<CustomerDTO>()
                .resource(new ClassPathResource("customers.json"))
                .jsonObjectReader(new JacksonJsonObjectReader<>(CustomerDTO.class)
                        .withObjectMapper(objectMapper)) // 注入自定义ObjectMapper
                .name("customerJsonItemReader")
                .build();
    }
}

方案2:调整Lombok配置确保方法命名匹配预期

在项目根目录创建lombok.config文件,添加以下配置:

lombok.accessors.chain=true
lombok.accessors.fieldprefix=

该配置确保Lombok生成的getter/setter严格匹配字段名,避免因命名规则差异导致Jackson无法识别。

验证要点

  • 确认项目已引入lombok和jackson-databind依赖(Spring Boot项目通常会自动引入)
  • 通过IDE反编译功能检查CustomerDTO类,确认@Data注解已正确生成getter/setter方法

内容的提问来源于stack exchange,提问作者Raymond Nathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:55:14