问题背景
最近因为发现有一个表字段被设计成u_name,然后用工具生产的实体的属性字段是uName,就是首字母是小写,第二个字母是大写的这类属性,然后我们关于这个字段的一个接口的请求对象VO中字段也是沿用的uName。
然后postman测试提交数据的时候,json请求体中字段属性也是uName。
我们这个项目是采用SpringBoot 2.1.5.RELEASE的,json序列化的工具是jackson,版本是2.9.8,这可能是jackson对于这类字段属性json序列号支持不太友好的地方。
解决方案
- 采用@JsonProperty注解给uName属性字段定义json字段别名.
/**
* 姓名
*/
private String uName; - 给请求VO实体添加@JsonAutoDetect注解
public class UserVO {
/**
- 姓名
*/
private String uName;
}
注解说明
@JsonAutoDetect
该注解的作用是配置自动识别的类型:
有以下四个属性:
- getterVisibility:定义getter方法的识别范围。
- isGetterVisibility:定义is-getter方法的识别范围(boolean类型的getter,很少用)。
- setterVisibility:定义setter方法的识别范围。
- creatorVisibility:定义构造器识别范围。
- fieldVisibility:定义属性识别范围。
识别范围是一个枚举,包括: - Visibility.ANY:表示从 private 到 public 修饰,都可识别。
- Visibility.NON_PRIVATE:表示除 private 修饰不可识别,其他都识别。
- Visibility.PROTECTED_AND_PUBLIC:protected 和 public都识别。
- Visibility.PUBLIC_ONLY:仅 public 可见。
- Visibility.NONE:所有皆不可见。
- Visibility.DEFAULT:缺省,所有被 public 修饰的属性、 getter 和所有 setter皆可见。