踩坑实录:接口正常Feign调用字段值为空 问题现象接口返回的客户信息如下{ mName: 51石雷, cAddr: 张东路1387号 }对应的实体类定义为Data public class CustomerInfo { private String mName; private String cAddr; }从表面上看字段名与JSON中的键值一一对应似乎没有问题。然而实际测试发现mName和cAddr的值始终为null而其他字段则正常。问题排除首先排除了接口本身的问题。通过Postman直接调用接口数据能够正常返回确认JSON字段名确实是mName和cAddr。由此判断问题出在反序列化环节。根本原因Jackson的属性名推断机制Jackson在反序列化过程中并不直接根据字段名进行映射而是基于getter/setter方法名进行推断。对于字段mNameLombok生成的getter方法如下public String getMName() { return this.mName; }这里需要特别注意JavaBeans规范的一个特殊规则当属性名的第二个字母为大写时getter/setter方法的首字母也需要大写。字段名标准Getter方法Jackson推断的属性名namegetName()name✓mNamegetMName()MName✗Jackson看到getMName()方法会按照规范推断属性名为MName而JSON中实际使用的是mName由于大小写不匹配导致反序列化失败。命名习惯的由来这种单字母前缀加驼峰的命名方式源于老系统的编码习惯mName member name会员名称cAddr company address公司地址pId person id人员ID当时可能认为这种命名方式简洁明了但现在却成为了潜在的问题源。这并非系统bug而是历史遗留问题。解决方案使用JsonProperty注解最直接的解决方案是通过JsonProperty注解显式指定JSON字段名绕过Jackson的自动推断机制Data public class CustomerInfoResponse { JsonProperty(mName) private String mName; JsonProperty(cAddr) private String cAddr; }这种方法改动最小且保持了向后兼容性。最佳实践建议场景建议新项目开发避免使用单字母开头的驼峰命名采用完整的单词进行命名对接老系统检查字段命名格式对mName这类特殊命名字段直接添加JsonProperty注解大量特殊字段考虑全局配置Jackson的命名策略统一处理特殊情况总结而言对接老系统时遇到的问题往往不是技术难点而是命名习惯的冲突。Jackson严格按照规范处理数据而