2017-01-06 2 views
2

Ich versuche, einige Json von einem API zu erhalten und sie in eine POJO ist zu analysieren mit ihnen zu arbeiten, aber ich habe diesen Fall, wo ich für einen Schlüssel eines einfachen String bekommen oder eine Arraylist von Strings.Jackson Mapping Liste des String oder einfachen String

Die Json sieht wie folgt aus:

{ 
    "offerDisplayCategoryMapping": [ 
    { 
     "offerKey": "EUICC_BASE_ACTIVATION_V01", 
     "categoriesKeys": { 
     "categoryKey": "Included" 
     } 
    }, 
    { 
     "offerKey": "EUICC_BASE_ACTIVATION_V02", 
     "categoriesKeys": { 
     "categoryKey": "Included" 
     } 
    }, 
    { 
     "offerKey": "EUICC_BASE_ACTIVATION_V03", 
     "categoriesKeys": { 
     "categoryKey": [ 
      "Option", 
      "Included" 
     ] 
     } 
    }] 
} 

Ich bin mit Federauflage das Ergebnis aus der API zu erhalten. Ich habe ein POJO erstellt, das categoriesKeys mit einem List<String> darstellt, das categoryKey definiert und in meinem RestTemplate habe ich ein ObjectMapper definiert, wo ich DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY für den Fall von einfachen Zeichenfolgen ermöglichte, aber das funktioniert nicht !!

Irgendwelche Vorschläge?

+0

Es wäre einfacher, wenn Sie Ihre pojo (n) und Ihre 'RestTemplate' in der hinzufügen zu helfen Frage –

Antwort

6

Zusätzlich zu dem globalen Konfiguration bereits erwähnt, ist es auch möglich, diese auf einzelne Eigenschaften zu unterstützen:

public class Container { 
    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 
    // ... could also add Feature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED 
    public List<String> tags; 
} 
2

Da es sich um eine Liste der Schlüssel ist, wird es funktionieren. wenn im Fall hat die Eigenschaft Einzelwert und nicht in Array wie unter DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY wird dafür sorgen, Deserialisieren einzelne Eigenschaft als Array

{ 
    "CategoriesKeys":{ 
    "categoryKey":{ 
     "keys":"1" 
     } 
    } 
} 



@JsonRootName("CategoriesKeys") 
    protected static class CategoriesKeys{ 

     private CategoryKey categoryKey; 
//getters and setters 

} 

protected static class CategoryKey{ 

     private List<String> keys; 
//getters and setters 

} 

TestClass: 

ObjectMapper mapper=new ObjectMapper(); 
    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
    mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 

Output: 

{"CategoriesKeys":{"categoryKey":{"keys":["1"]}}} 
3

Ich habe diese versucht, mit nur jackson außerhalb Frühlings und es funktioniert wie erwartet mit:

ObjectMapper mapper = new ObjectMapper(); 
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 

Kenntnis, dass sich RestTemplate Register ein MappingJacksonHttpMessageConverter mit eigenem ObjectMapper. Check this answer für die Konfiguration dieser ObjectMapper.

Verwandte Themen