2017-03-16 2 views
1

Ich bin ein json von meinem Client-Seite alsWie erstellt man VarArgs in Java Bean und Jackson Json?

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

oder

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

ich ein Java-Objekt erstellen möchten, die sowohl die Nutzlast akzeptieren sollte.

Ich arbeitete an Varargs in Java buut ich habe nie Varargs in Java-Modell versucht. Der Versuch, eine Java Bean wie diese zu erstellen,

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

Aber immer Kompilierungsfehler als "unerwartetes Token".

geändert Dann ist mein POJO dies zu mögen,

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

Aber Jackson eine Ausnahme werfen Kann nicht Instanz von java.lang.String deserialisieren [] aus value_string Token

Auch ich bin bereit um meine Java-Bean gemäß meiner JSON-Struktur zu ändern.

Jede Hilfe wäre willkommen.

+0

Das Problem scheint zu sein, dass ein String [] sowohl einem einzelnen String-Wert als auch einem Array von Strings entsprechen soll. Wenn ich nur Jackson wüsste ... –

+0

Hast du versucht, deinen Pojo in 'private List value' zu ​​ändern? –

+0

@ ToddSewell ... In der Tat. Aber ist es möglich, Varargs in Java Bean anstelle von String [] zu erstellen? – VelNaga

Antwort

2

Können Sie es versuchen?

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); 
    } 
} 

Die Eigenschaft DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY helfen muss.

Verwandte Themen