2017-03-16 5 views
1

私はペイロードの両方を受け入れるべきJavaオブジェクトを作成したいJava beanとJackson JsonでVarArgsを作成する方法は?

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

または

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

ように私は私のクライアント側からJSONを受け付けております。

私はJavaでvarargsに取り組んでいましたが、私はJavaモデルでvarargsを試したことはありません。 は

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

、このようなJava Beanを作成しようとしているが、「予期しないトークン」としてコンパイルエラーを取得します。

は、次にこれを好きな私のPOJO、

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

を変更しかし、ジャクソンははトークン

でも、私は準備ができていますVALUE_STRINGのうち、java.lang.Stringで[]のインスタンスをデシリアライズできない例外をスローしますjsonの構造に従ってJava Beanを変更します。

ご協力いただければ幸いです。

+0

問題は、文字列[]が単一の文字列値と文字列の配列の両方に対応するようにしたいということです。私だけがジャクソンを知っていたら... –

+0

あなたのpojoを 'private List value'に変更しようとしましたか? –

+0

@ToddSewell ...確かに。しかし、String []の代わりにJava BeanでVarargsを作成することは可能ですか? – 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を助けなければなりません。

関連する問題