2013-01-31 14 views
5

Benim Kontrolörü ile nesnelerin listesini döndürür tamamlayanJackson - (@ResponseBody kullanarak) myObj nesnelerin bir listesi kök nesnesi

public MyObj 
{ 
    int a; 
    int b; 
} 

JSON şuna benzer dönüş:

[{"a":1,"b":2},{"a":2,"b":2}] 

isterim i SerializationCon etkinleştirmek için gerekenleri okuduğum itibaren

{ "data": [{"a":1,"b":2},{"a":2,"b":2}]} 

: Bu gibi bir şey dönecektir yüzden bu JSON sarmak için fig.Feature.WRAP_ROOT_VALUE veya (?) denetleyicimin üstüne @JsonRootName ("data") kullanın.

Ayrıca @XmlRootElement çalıştı, hiçbir şey işe yaramıyor. Nesnelerin listesini kök adıyla sarmalamanın doğru yolu nedir?

+1

Bunu nasıl yapacağınızı hiç anladın mı? Bir liste haritası oluşturarak bir yol buldum ve ObjectMapper'ın bunu yapmasına izin verdim, ama bu çok zarif değil. Bunu yapmanın daha iyi bir yolu olduğunu düşünüyorum. Bunu çözebildin mi? – Seagull

cevap

6

Nesne yerine liste yerine @JsonRootName ekleme hakkında konuştuğunuz gibi geliyor, bu da yapmaya çalıştığınız şeyi gerçekleştirmeyecek.

Eğer @JsonRootName kullanmak isterseniz yukarıda belirtilen gibi SerializationFeature.WRAP_ROOT_VALUE etkinleştirmek ve sınıfa ek açıklama eklemek istersiniz: Bu nesneleri kendilerini kaydırılır

@JsonRootName("data") 
public MyObj { 
    int a; 
    int b; 
} 

, değil listesi:

{ 
    "listName": [ 
     { 
      "data": {"a":1, "b":2} 
     }, 
     { 
      "data": {"a":2, "b":2} 
     } 
    ] 
} 

belki genel bir nesne sarıcı oluşturarak, bir nesnenin listeyi kaydırmak istiyorsanız

en iyi çözümdür. Bu böyle bir sınıfla yapılabilir:

public final class JsonObjectWrapper { 
    private JsonObjectWrapper() {} 

    public static <E> Map<String, E> withLabel(String label, E wrappedObject) { 
     return Collections.singletonMap(label, wrappedObject); 
    } 
} 

Sonra geri tepki ile listenizi göndermeden önce, sadece JsonObjectWrapper.withLabel("data", list) sarın ve Jackson gerisini halleder.

+0

Belki Collections.singletonMap (label, wrappedObject) daha verimli ve anlaşılır olurdu? –

+0

Harika öneri @charlie_pl! Gönderi güncellendi. –

İlgili konular