目录
1.问题现象
如果VO实体用@Data注解生成get/set,对于首字母小写,第二个字母大写的成员变量,@RequestBody无法完成自动映射,取值为null
2.问题实质
Lombook的@Data注解和Spring的Jackson对于get/set的生成方式不同
3.问题原因
private String xIndex;
对于这种首字母小写,第二个字母大写的成员变量,Lombook生成的get/set方法如下:
但Jackson和Idea生成的get/set方法如下:
因为Lombook和jackson生成set方法的方式不同,造成SpringMVC在映射VO字段时无法找到setxIndex()方法(因为Lombook生成的是setXIndex),故自动映射失败
4.解决方法
利用Idea生成符合Spring规范的get/set(略low)
利用@JsonProperty(value = "xIndex"),强制Jackson在反序列化时给属性重新命名
借鉴博文:Lombok首字母小写,第二个字母大写的问题 - 简书
Naming convention for getters/setters in Java - Stack Overflow