在Java中反序列化响应时更改属性名称

时间:2018-09-18 07:09:05

标签: java json rest jackson

API的JSON响应:

{
   "result":[
      {
         "ResultType":"SUCCESS"
      }
   ]
}

转换为ResultClass.class后:

{
   "result":[
      {
         "resultType":null
      }
   ]
}

转换为ResultClass.class后的预期输出:

{
   "result":[
      {
         "resultType":"SUCCESS"
      }
   ]
}

我正在与第三方API集成。我想在反序列化时更改属性名称。我已经尝试在提交的getter和setter上使用@JsonProperty,但是该值未反映在字段resultType中。

ResultClass.java

@JsonProperty("result")
List<TestClass> result = new ArrayList<>();

public List<TestClass> getResult() {
        return result;
}

public void setResult(List<TestClass> result) {
    this.result = result;
}

TestClass.java

@JsonProperty("ResultType")
private String resultType;

public String getResultType() {
        return resultType;
}

public void setResultType(String resultType) {
        this.resultType = resultType;
}

注意:我已经尝试过JsonObject并且它工作正常。我正在使用HttpClient和HttpResponse发出请求。杰克逊版本:2.5.0

1 个答案:

答案 0 :(得分:0)

2种解决方案可用:

1。进行不区分大小写的反序列化

在对象映射器上添加此功能:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

2。使用不同的属性名称进行序列化和反序列化

要将属性ResultType的名称更改为resultType,您应该同时使用@JsonGetter@JsonSetter

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class TestClass {

    private String resultType;

    @JsonGetter("resultType")
    public String getResultType() {
        return resultType;
    }

    @JsonSetter("ResultType")
    public void setResultType(String resultType) {
        this.resultType = resultType;
    }
}