如何在这种情况下使用@JsonProperty - 与lombok的jackson API
问题描述:
我知道如何在jackson API中使用@JsonProperty
,但下面的情况是不同的。如何在这种情况下使用@JsonProperty - 与lombok的jackson API
我在下面的json片段。
{"results":[{"uniqueCount":395}
所以,用jackson
API上面的JSON解析,我已经写了下面的Java POJO类。
package com.jl.models;
import lombok.Data;
@Data
public class Results
{
private int uniqueCount;
}
后来,我得解析下面类似的json片段。现在
{"results":[{"count":60}
,这里的问题是,我不能,因为它需要一个字符串uniqueCount
解析此JSON与Results
类。
我可以很容易地创建另一个具有count
成员变量的Java POJO类,但我必须创建所有具有Results
类的实例的父类Java类。
那么,有没有什么办法可以自定义其lombok
行为Results
课,而不会影响互相解析这两个JSON?
感谢您的帮助提前。
答
您可以使用杰克逊的@JsonAnySetter注释指示所有未知的关键方法之一,有你能做的分配自己:
@Data
public class Results
{
private int uniqueCount;
// all unknown properties will go here
@JsonAnySetter
public void setUnknownProperty(String key, Object value) {
if (key.equals("count")) {
uniqueCount = (Integer)value;
}
}
}
可以摆脱Results'的'并且只使用一个'名单' ,那么只有'{“结果”:[395]}“就够了,不是吗? –
好的..谢谢你的建议。在前端大量使用'results'对象来解析json。现在,我必须在所有地点重写。有没有一种方法可以通过在生成json的同时附加结果来做到这一点,以避免在前端进行更改? – harshavmb
你可以有'count'字段的另一个'Results2'类,并且在反序列化时使用这些类中的任何一个,然后如果获得第二个类型则映射到原始的'Results'。虽然我更喜欢你使用我的原始建议,因为'uniqueCount'字段没有给你的结构添加任何东西,但是看起来麻烦。或者这 - > http://*.com/a/19566131/3641067(看起来可怕的IMO) –