如何让Jackson的@JsonProperty忽略JSON键的大小写?
解决Jackson解析JSON时忽略键大小写的问题
问题场景
使用Jackson结合@JsonProperty解析JSON时,遇到语义一致但大小写任意组合的键(如field、Field、fieLd等),通过@JsonAlias逐个添加别名的方式繁琐且不具备扩展性,需要一种通用的忽略大小写配置方案。
解决方案
1. 全局配置(推荐)
通过配置ObjectMapper开启忽略属性名大小写的全局特性,所有解析操作都会自动适配大小写混乱的JSON键。
普通Java项目代码示例
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.MapperFeature; public class JacksonDemo { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); // 核心配置:开启忽略属性名大小写 objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); // 测试不同大小写的JSON String json1 = "{\"field\": \"test1\"}"; String json2 = "{\"Field\": \"test2\"}"; String json3 = "{\"fIeLd\": \"test3\"}"; MyPojo pojo1 = objectMapper.readValue(json1, MyPojo.class); MyPojo pojo2 = objectMapper.readValue(json2, MyPojo.class); MyPojo pojo3 = objectMapper.readValue(json3, MyPojo.class); // 三个对象的field属性均会被正确赋值 System.out.println(pojo1.field()); // test1 System.out.println(pojo2.field()); // test2 System.out.println(pojo3.field()); // test3 } } // POJO无需额外别名注解,正常定义即可 public record MyPojo(String field) {}
Spring Boot项目全局配置
可以通过配置文件或Java配置类实现:
- 配置文件方式(application.properties)
spring.jackson.mapper.accept-case-insensitive-properties=true
- Java配置类方式
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.MapperFeature; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { return new ObjectMapper() .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); } }
2. 局部配置(仅针对特定POJO)
如果不需要全局开启,只想让某个POJO支持大小写忽略,可以在POJO上添加@JsonIgnoreProperties(ignoreCase = true)注解:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreCase = true) public record MyPojo(String field) {}
这样该POJO在解析时会自动忽略JSON键的大小写,其他POJO不受影响。
注意事项
- 开启大小写忽略后,Jackson会自动匹配语义一致的键,无需再手动添加大量
@JsonAlias注解,彻底解决扩展性问题。 - 若POJO中使用了
@JsonProperty指定属性名,该配置依然生效,不会影响匹配逻辑。
内容的提问来源于stack exchange,提问作者PatPanda
相关产品推荐
相关产品推荐

