Java中解决Json序列化与反序列化字段匹配问题

Json与实体对象映射问题

Posted by zhanghaichao on September 4, 2018

使用spring-cloud搭建服务时候需要取解析传来的请求参数,以及给出返回的结果。其中大多情况下这些参数和结果都是以json格式进行传递的。

对于json的处理分为两种:

  1. 以json字符串的方式进行接收与返回,也就是说需要自己手动解析这个字符串,或者调用fastjson、gson这些工具来将他们与java对象之间进行互相转化。
  2. 搭建服务时候使用java对象去接收这个请求参数,给出响应时也是直接以对象的方式进行返回,这种情况spring-cloud框架会自动帮你解析和封装json。

除了自己手动调用set方法解析之外,无论是调用工具解析还是框架自动解析,就要求你定义的java实体类中变量名与json串中的key对应起来,这样才能自动的将value映射到变量中。

有时候会遇到一些特殊情况,由于Java变量命名规范,json的key无法和Java变量名对应,如:parse-content,就无法使用它来作为变量名。

针对第一种情况,如果你采用的是fastjson来自动解析,可以在你定义的实体类的变量前面加入 @JSONField(name = “parse-content”)注解,name的值就是json中的key。

    @JSONField(name = "doc-key")
    private String doc_key;

这样使用fastjson自动解析的时候就会将json中这个key的值映射到这个变量中了。

第二种情况,框架解析使用的是jackson,需要添加@JsonProperty(value = “parse-content”)注解

    @JsonProperty(value = "parse-content")
    private List<Map<String, Object>> parseContent;

注意: 注解不要选错了,com.fasterxml.jackson.annotation.JsonProperty;

这两个注解也可以单独添加到get或者set方法上,加到set方法表示接收参数时候按照这个名字解析,加到get表示返回时候将json的key变更为注解中的值。