2016-05-11 25 views
5

Ho cercato Stack Overflow prima di postare, ma non c'erano soluzioni per Jackson.

Ecco una risposta del server:
Jackson desrialize quando JsonProperty è a volte array e talvolta un singolo oggetto

{ 
    "ok": true, 
    "result": [ 
    { 
     "update_id": 489881731, 
     //rest 
    }, 
    { 
     "update_id": 489881732, 
     //rest 
    } 
    ] 
} 

Come vedete proprietà "result" è un array.

Ora, questo è un altro di risposta:

{ 
    "ok": true, 
    "result": { 
    "id": 211948704, 
    "first_name": "ربات ادمین‌های تلگرام", 
    "username": "tgAdminsBot" 
    } 
} 

Qui "result" è un singolo oggetto.

Questa è la mia classe che desidero deserializzare i contenuti. Ho scritto un deserializzatore personalizzato per TObject naturalmente:.?

public class Result 
{ 
    private TObject[] result; 
    private boolean ok; 

    public void setOk (boolean ok) {//code} 

    public void setResult (TObject[] result) {//code} 


    public TObject[] getResult() {//code} 

    public boolean getOk(){//code} 
} 

così ho pensato nella mia classe che "result" è un array di TObject s Ora che cosa posso fare Sta usando @JsonProperty("result") per due settori che uno è una serie di TObject s ed uno è un singolo TObject OK?

Se non che altro posso fare?

+0

probabilmente questo può aiutare 'DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY' http://stackoverflow.com/questions/17003823/make-jackson-interpret-single-json-object-as-array-with- one-element/17004714 # 17004714 o questo: http://stackoverflow.com/search?q = DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY – varren

+0

Ha funzionato perfettamente! Grazie! –

+0

@varren, si prega di postarlo come risposta in modo che la domanda possa essere chiusa correttamente, grazie –

risposta

5

Se si abilita.210 entrambi

{"result": []} e

{"result": {}} possono essere analizzati come

class Result{ 
    List result; 
} 

Documentation link

caratteristica che determina se è accettabile costringere non-array (in JSON) a valori funziona con i tipi di raccolta Java (array, java.util.Collection). Se abilitato, i deserializzatori di raccolta eseguiranno cercando di gestire i valori non di array come se fossero "impliciti" attorno all'array JSON . Questa funzione è pensata per essere utilizzata per motivi di compatibilità/interoperabilità , per funzionare con i pacchetti (come i convertitori da XML a JSON) che escludono l'array JSON nei casi in cui lo è solo un singolo elemento dell'array. La funzionalità è disabilitata per impostazione predefinita.

Demo come usarlo per jsons ingresso OP e POJO:

ObjectMapper mapper = new ObjectMapper() 
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 
Result result = mapper.readValue(Result.class; 

può essere utilizzato con @JsonFormat sopra classe o campo se non ti piace la versione mapper per qualche motivo

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 

PS. Altre domande SO su questo problema: LINK

Problemi correlati