Jackson反序列化API响应时eMail等次首字母大写字段值为null问题
问题原因
这个问题是Jackson默认的Bean命名匹配规则和Java Bean标准规范在「首字母小写、第二个字母大写」格式的字段场景下不兼容导致的:
- Lombok的
@Data注解会遵循Java Bean规范生成这类字段的getter/setter,比如字段eMail生成的是geteMail()、seteMail() - Jackson默认的命名解析逻辑没有遵循该规范,会将这类字段对应的预期JSON键名识别为
EMail,而API返回的JSON键名是eMail,二者无法匹配,最终字段赋值为null - 你直接用Object接收时本质是把JSON解析为了Map结构,直接按字符串key取值,所以不会有匹配问题
解决方法
方法1:使用@JsonProperty注解(推荐,兼容性最强)
直接在对应字段上显式指定要映射的JSON键名即可,无需修改全局配置:
@JsonProperty("eMail") private String eMail; @JsonProperty("iKindName") private String iKindName; // 其余同格式字段按此规则添加注解即可
方法2:全局开启Jackson标准Bean命名规则
如果这类字段数量较多,不想逐个加注解,可以修改Jackson的全局配置,启用标准Java Bean命名匹配:
- 单独使用Jackson时配置:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.enable(com.fasterxml.jackson.databind.MapperFeature.USE_STD_BEAN_NAMING);
- Spring Boot项目可以直接在配置文件中添加配置全局生效:
spring: jackson: mapper: use-std-bean-naming: true
内容的提问来源于stack exchange,提问作者mtmx
相关产品推荐
相关产品推荐

