[英]Jackson Deserialize JSON To List of Different Types Depending On String Value
我需要使用Jackson來將JSON字符串反序列化為不同對象類型的列表,具體取決於在其中一個字段中設置的值。 我想知道創建不同列表類型的最佳方法是什么,如何實現呢?
我的JSON看起來像這樣:
{"test":
{"conditions":[....],
"consequence": {"actionType":"string",
"action": ["value 1","value 2"]}
}
}
因此,當上面解析時,將返回List<String>
{"test":
{"conditions":[....],
"consequence": {"actionType":"test",
"action": ["test","test"]}
}
}
並且上面將返回List<Test>
我的Pojo僅包含:
@Data
public class Consequence {
public Consequence(String actionType){
this.actionType = actionType;
};
@JsonProperty("ACTIONTYPE")
private String actionType;
@JsonProperty("ACTION")
private List<????> action;
}
更新:
在我使用以下層次結構更新了POJO之后:
@Data
public abstract class BaseConsequence {
public BaseConsequence(String actionType){
this.actionType = actionType;
};
@JsonProperty("ACTIONTYPE")
private String actionType;
}
@Data
@DiscriminatorValue(value = "CONCATENATE")
public class ConcatenateConsequence extends BaseConsequence {
public ConcatenateConsequence(String actionType, List<String> concatenateValues) {
super(actionType);
this.concatenateValues = concatenateValues;
}
private List<String> concatenateValues;
}
@Data
@DiscriminatorValue(value = "test")
public class TestConsequence extends BaseConsequence {
public TestConsequence(String actionType, List<Test> tests){
super(actionType);
this.tests = tests;
}
private List<Test> tests;
}
@Data
public class Test {
public Test(){};
public Test(List<Condition> conditions, BaseConsequence baseConsequence){
this.conditions = conditions;
this.baseConsequence = baseConsequence;
}
@JsonProperty("CONDITIONS")
private List<Condition> conditions;
@JsonProperty("CONSEQUENCE")
private BaseConsequence baseConsequence;
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Test)) {
return false;
}
Test test = (Test) o;
return Objects.equals(conditions, test.conditions) && Objects.equals(baseConsequence, test.baseConsequence);
}
@Override
public int hashCode() {
return Objects.hash(conditions, baseConsequence);
}
}
我收到以下錯誤:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: {"TEST":{"CONDITIONS":[{"KEY":"KEY1","VALUES":["FLOAT"],"OPERATOR":""}],"CONSEQUENCE":{"ACTIONTYPE" :{"CONCATENATE": ["VALUE1","VALUE2"]}}}}; line: 1, column: 9] (through reference chain: package.TestCase["TEST"])
您可以使用兩種變體:
@DiscriminatorValue
。 有關完整的描述和示例,請參見此處http://www.baeldung.com/jackson-inheritance
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.