@RequstBody在将json转换成自定义对象时,json里属性key和对象中属性key一致的情况下,对象能接收到json里的属性,比如全小写(name)、驼峰(userName),只要两边约定好一种方式遵循就不会出现问题
但有时候会与其他系统对接,说白了在不得以的情况下必须遵循其他系统的属性规则,这时候可能会出现不按照规则定义的属性,比如gNo、AAA、GNo等等,处理方式都一样
例如json中有属性值gNo,有两种错误定义方式
情形一:
private String gNo;
可以告诉你,这样对象中接收不到,如果你输出接口文档,你会发现文档中属性会变成gno,原因是springmvc默认处理类MappingJacksonHttpMessageConverter 在对 json和对象进行转换时,将对象中属性转换成小写,这时候发现gNo和gno不一致,转换不成功
此时会想到一种办法,就是对象中定义的属性不依赖传过来的json属性,相当于中间加一层适配,可以用注解@JsonProperty("json传过来的属性key),此时对象中属性可以随意定义,这样处理,属性是能接收到了,但对象中接收的属性key定义的不好也不行,比如下面情形
情形二:
@JsonProperty("gNo")
private String gNo;
如果你输出文档,会发现出来两个属性 gno和gNo,这样就会误导别人了
正确的处理方式是
@JsonProperty("gNo")
private String gno;
对象中属性值全部小写,这里我们差不多可以知道定义的规则了,首字母要小写,第二个字母要小写,尽量用驼峰格式书写
结论:我们在开发过程中一定要按照约定俗成的方式定义属性值,因为大部分框架都是在约定方式下工作的