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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:22:49