此页内容

Jackson

Memory

314字约1分钟

2024-04-30

Json反序列化时大写首字母匹配失败


在Spring接口接收请求体参数反序列化时,如果请求体Json的key首字母为大写,那么序列化为实体类时是无法把这个key的值填充到实体类对应的属性上的。


如下所示

Json
{
  "City": "广州"
}

因为Jackson通过Getter方法 getCity 获取属性,默认使用小写匹配Json-key,所以大写的 City 是无法匹配成功属性 city 的,最终实体参数为null。


解决


  1. 使用 @JsonProperty 注解,声明属性对应的Json-key
@JsonProperty(value = "Name")
private String name;

  1. 使用 @JsonAlias 定义属性映射的Key别名(列表
@JsonAlias(["City"])
private String city;

  1. 使用 @JsonAutoDetect 注解,使用不同策略检查字段
@JsonAutoDetect(
        fieldVisibility = JsonAutoDetect.Visibility.ANY, // 字段可见性:所有;对所有字段进行识别,无论私有或公共
        getterVisibility = JsonAutoDetect.Visibility.NONE, // Getter方法可见性:不使用;不通过Getter方法识别字段,就不会识别大写首字母
        setterVisibility = JsonAutoDetect.Visibility.NONE  // Setter方法可见性:不使用;不通过Setter方法识别字段
)