Memory
314字约1分钟
2024-04-30
在Spring接口接收请求体参数反序列化时,如果请求体Json的key首字母为大写,那么序列化为实体类时是无法把这个key的值填充到实体类对应的属性上的。
如下所示:
{
"City": "广州"
}// 这里改成City或CITY都没用
private String city;因为Jackson通过Getter方法 getCity 获取属性,默认使用小写匹配Json-key,所以大写的 City 是无法匹配成功属性 city 的,最终实体参数为null。
@JsonProperty 注解,声明属性对应的Json-key@JsonProperty(value = "Name")
private String name;@JsonAlias 定义属性映射的Key别名(列表)@JsonAlias(["City"])
private String city;@JsonAutoDetect 注解,使用不同策略检查字段@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.ANY, // 字段可见性:所有;对所有字段进行识别,无论私有或公共
getterVisibility = JsonAutoDetect.Visibility.NONE, // Getter方法可见性:不使用;不通过Getter方法识别字段,就不会识别大写首字母
setterVisibility = JsonAutoDetect.Visibility.NONE // Setter方法可见性:不使用;不通过Setter方法识别字段
)