簡體   English   中英

如何將 @JsonProperty 注釋與包含不同格式元素的數組一起使用

[英]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。

  1. JsonNode 很簡單。

    公共 class 參數 { 私有列表參數; //getter和setter public static class 參數 {

     private String name; private JsonNode value; //Getters and setters }

    }

  2. 如果需要具體的 class Jackson,這將正確地幫助您 - 在運行時在同一密鑰下解析不同的 model

基本上嘗試使用任何在線轉換器將 json 轉換為 java class

嘗試使用 modelmapper 庫進行 object 映射。 就像將 json 對象映射到 java 對象一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM