2017-03-16 25 views
1

我從我的客戶端接收JSON作爲如何在java bean和Jackson Json中創建VarArgs?

{ 
"name":"name", 
"type":"type", 
"value": "one" 
} 

{ 
"name":"name", 
"type":"type", 
"value": [ 
"one", 
"two" 
] 
} 

我想創建一個Java對象應同時接受的有效載荷。

我在Java buut中使用可變參數,我從未嘗試在Java模型中使用可變參數。 試圖創建一個Java bean這樣,

private String name; 
private String type; 
private String... value; 

但是,得到的編譯錯誤爲「意外的標記」。

然後改變了我的POJO喜歡這個,

private String name; 
private String type; 
private String[] value; 

但傑克遜拋出異常無法反序列化java.lang.String中[]的情況下進行VALUE_STRING令牌

即使我已經準備好了根據我的json結構更改我的Java bean。

任何幫助,將不勝感激。

+0

問題似乎是,你想要一個String []來對應一個字符串值和一個字符串數組。如果只有我知道傑克遜... –

+0

您是否嘗試將您的pojo更改爲'private List value'? –

+0

@ToddSewell ...確實。但是有可能在Java Bean中創建可變參數而不是String []? – VelNaga

回答

2

你可以試試嗎?

class Data { 
    private String name; 
    private String type; 
    private String[] value; 

    //gettes and setters 
} 


public class Example { 
    public static void main(String[] args) throws IOException { 
     final ObjectMapper mapper = 
       new ObjectMapper().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 

     String json1 = "{\"name\":\"name\",\"type\":\"type\",\"value\":\"one\"}"; 
     String json2 = "{\"name\":\"name\",\"type\":\"type\",\"value\":[\"one\",\"two\"]}"; 

     Data data1 = mapper.readValue(json1, Data.class); 
     Data data2 = mapper.readValue(json2, Data.class); 
     System.out.println(data1); 
     System.out.println(data2); 
    } 
} 

屬性DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY必須幫助。