[英]How to use @JsonProperty annotation with array containing elements of different format
我正在使用 API,它在 SpringBoot 應用程序中的請求和響應中使用 json 數組,其中包含各種格式的元素,我正在努力動態獲取正確的 class 元素以用於序列化/反序列化。
以下是 json 的簡化說明:
{
"parameters" :[
{
"name": "elementA",
"value": "valueOfElementAsAString"
},
{
"name": "elementB",
"value": "valueOfElementBAsString"
},
{
"name": "elementC",
"value": [
{
"label":"label1",
"size":"size1"
},
{
"label":"label2",
"size":"size2"
}
]
}
]
}
考慮以下基類:
class SimpleElement {
@JsonProperty("name")
public String name;
@JsonProperty("value")
public String value;
//constructor & stuff
}
class ComplexElement {
@JsonProperty("name")
public String name;
@JsonProperty("value")
public ArrayList<ComplexElementValue> value = new ArrayList<ComplexElementValue>();
//constructor & stuff
}
class ComplexElementValue {
@JsonProperty("label")
public String label;
@JsonProperty("size")
public String size;
//constructor & stuff
}
單個簡單或復雜元素的序列化/反序列化工作正常,但我應該如何使用 @JsonProperty 聲明我的 class 參數以正確處理整個數組?:
class Parameters {
???
}
根據我閱讀的內容,我的印象是我必須編寫自定義反序列化器和序列化器,但在這樣做之前我想確保沒有更簡單的方法?
目前,考慮到我有 nx simpleElements 和 1 x complexElement,我讓它與這樣的 class 一起工作:
class Parameter {
@JsonProperty("parameters")
public MultiElement element;
public class MultiElement {
public ArrayList<SimpleElement> regularElements;
public ComplexElement complexElement;
}
//constructor & stuff
}
並使用 JsonNode 庫(在本例中為 org.camunda.spin.json.SpinJsonNode)“手動”處理 json 的反序列化/序列化,但這對我來說聽起來像是一個臨時解決方案
提前致謝
使用 jackson 處理動態 json。
JsonNode 很簡單。
公共 class 參數 { 私有列表參數; //getter和setter public static class 參數 {
private String name; private JsonNode value; //Getters and setters }
}
如果需要具體的 class Jackson,這將正確地幫助您 - 在運行時在同一密鑰下解析不同的 model
基本上嘗試使用任何在線轉換器將 json 轉換為 java class
嘗試使用 modelmapper 庫進行 object 映射。 就像將 json 對象映射到 java 對象一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.