2012-06-02 11 views
15

Bir Javascript gönderen JSON hashes (Tag) dizisini eşleştirmek için Jackson kullanarak sorunları yaşıyorum. İşte Harita JSON dizi nesneler için @RequestBody List <T> jackson kullanarak


kontrolör @RequestBody tarafından alınan verilerdir (Doğru json RequestHeader ile göndermek):

@RequestMapping(value = "purchases/{purchaseId}/tags", method = RequestMethod.POST, params = "manyTags") 
@ResponseStatus(HttpStatus.CREATED) 
public void createAll(@PathVariable("purchaseId") final Long purchaseId, @RequestBody final List<Tag> entities) 
{ 
     Purchase purchase = purchaseService.getById(purchaseId); 

     Set<Tag> tags = purchase.getTags(); 
     purchaseService.updatePurchase(purchase); 
    } 

Ben ayıklama: Burada

[{name=tag1}, {name=tag2}, {name=tag3}] 


kontrolcüsüdür ve "Tag" türünde nesnelerin bir listesi olarak değil, genel nesnelerin bir ArrayList'i olarak gösterdiği "varlıklar" değerini görüntüler.

Geçirilen bir nesne dizisini 'Etiket' türündeki bir listeye eşlemek için jackson'u nasıl alabilirim? Bu deklarasyon List<?> tag gibi bir şeydi sanki Bahar, tip-sildim versiyonunu nedense tam tür bilgileri geçirmeden ziyade değil gibi geliyor

Teşekkür

+0

bunu böyle denediniz mi? '[{" name "=" tag1 "}, {" name "=" tag2 "}, {" name "=" tag3 "}]' –

+0

Bunu denemedim Sean, bir çözüm kullanarak Bunun yerine @RequestBody için dizi. Http://stackoverflow.com/questions/4441557/rest-with-spring-and-jackson-full-data-binding –

cevap

39

. Tamamen (Bahar entegrasyon ekibinden şey gerekebilir) bu sorunu çözmek için neler yapılabileceğini bilmiyorum ama tek etrafında çalışma gibi kendi türünü tanımlamaktır:

static class TagList extends ArrayList<Tag> { } 

ve kullanım yerine. Bu, süper tip bildirimler yoluyla genel parametrelemeyi koruyacaktır, böylece Spring sadece TagList.class eşdeğerini geçse bile, Jackson Tag parametresini anlayabilir.

+0

Cheers StaxMan'a bakın .... Ek olarak bir dizi seçenek sunan aşağıdaki bağlantıya rastladım. Burada bir tane var. http://stackoverflow.com/questions/4441557/rest-with-spring-and-jackson-full-data-binding –

+0

Teşekkürler StaxMan. Aynı konuyla karşı karşıya kaldım. Cevabın bana yardım etti. –

+0

Çok basit ve pratik, bunu android uygulamamda kullanıyorum. Teşekkürler – Gino

16

aşağıdaki gibi bu yerine bir List daha bir dizi elde etmektir yapmanın bir başka yolu: sadece bir eklemeniz gerekir böylece

@RequestBody Tag[] entities 
+0

Tamam evet Thomas bir Etiket listesi almak istedi, ancak bunun işe yaramadığını görmek için bir dizi elde etmeyi önerdim.Aynı sorunla bir süre uğraştım ve şu anda Liste'deki nesneler, genel nesne, yaratılmayacak, belki gelecekte bu düzeltilecek, bilmiyorum, bir liste almak yerine RequestBody aracılığıyla, gönderici tarafında değişiklik yapmak zorunda kalmadan, o belirli nesnenin bir dizisini elde etmek gerekir. – liloboy

0

Jackson, özel Nesneler üzerindeki parametreleri olmayan bir varsayılan kurucu gerektirir Tag sınıfınıza varsayılan kurucu. Senin durumunda

sadece Tag sınıfına ekleyin:

public Tag(){}