在Java中反序列化响应时更改属性的名称
来自API的JSON响应:在Java中反序列化响应时更改属性的名称,java,json,rest,jackson,Java,Json,Rest,Jackson,来自API的JSON响应: { "result":[ { "ResultType":"SUCCESS" } ] } 转换为ResultClass.class后: { "result":[ { "resultType":null } ] } 转换为ResultClass.class后的预期输出: { "result":[ { "resultType":
{
"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;
}
@JsonProperty("ResultType")
private String resultType;
public String getResultType() {
return resultType;
}
public void setResultType(String resultType) {
this.resultType = resultType;
}
注意:我尝试过JsonObject,它工作正常。我正在使用HttpClient和HttpResponse发出请求。Jackson版本:2.5.02解决方案可用: 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;
}
}
您在输出中实际得到了什么?。你也可以添加它吗?{“result”:[{“ResultType”:“SUCCESS”}]}转换{“result”:[{“ResultType”:null}}}后,我已经添加了详细信息@maruthiadithya如果你在getter和setter上添加
@JsonProperty(“ResultType”)
,你会得到什么输出?我测试你的代码,一切都正常!