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

问题描述 投票:2回答:1

来自API的JSON响应:

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

转换为ResultClass.class后:

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

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

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

我正在与第三方API集成。我希望在反序列化时更改属性名称。我已经尝试了@jsonProperty对已归档的getter和setter。但是该值未反映在字段resultType中。

result class.Java

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

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

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

test class.Java

@JsonProperty("ResultType")
private String resultType;

public String getResultType() {
        return resultType;
}

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

注意:我已经尝试过JsonObject,它运行正常。我正在使用HttpClient和HttpResponse来发出请求.Jackson版本:2.5.0

java json rest jackson
1个回答
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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.