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

如何重写Jackson ObjectMapper适配首字母大写属性的Getter/Setter映射

解决Jackson映射首字母大写字段与JSON键的问题

不用重写Jackson解析器逻辑,直接通过配置命名策略就能解决这个问题,以下是具体方案:

核心问题原因

Jackson默认采用LOWER_CAMEL_CASE命名策略,会把JSON中的Field1自动转为field1,去匹配POJO中对应属性名(或getter/setter推断的属性名)。但你的Avro生成POJO的getter/setter是getField1/setField1,默认推断的属性名是field1,和JSON的Field1不匹配,导致映射失败。

解决方案:配置全局命名策略

直接修改ObjectMapper的命名策略为UPPER_CAMEL_CASE,让Jackson直接用JSON键名(首字母大写)匹配POJO中getter/setter对应的属性名:

Jackson 2.12+ 版本代码

String json = "{\"Field1\":\"Value1\",\"Field2\":\"Value2\",\"Field3\":\"Value3\"}";
ObjectMapper objectMapper = new ObjectMapper();
// 设置命名策略为大驼峰(首字母大写)
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE);
Sample sample = objectMapper.readValue(json, Sample.class);

旧版本Jackson(2.11及以下)代码

String json = "{\"Field1\":\"Value1\",\"Field2\":\"Value2\",\"Field3\":\"Value3\"}";
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
Sample sample = objectMapper.readValue(json, Sample.class);

局部配置(可选)

如果不想全局修改命名策略,也可以给Avro生成的POJO类添加@JsonNaming注解(需确保可修改生成类,或在Avro Schema中配置生成注解):

@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class Sample {
    // 原POJO字段与getter/setter
}

效果验证

配置完成后,传入首字母大写的JSON字符串,Jackson会自动将Field1匹配到getField1/setField1对应的属性,无需手动修改JSON键名或POJO结构。

内容的提问来源于stack exchange,提问作者Deepak Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:43:37