2013-03-15 24 views
23

DynamoDB'deki bazı verileri, karmaşık nesneyi JSON'a dönüştürmek için Jackson'ı kullanarak depolayan bir uygulama var.LinkedHashMap'i Karmaşık Nesnesine Döküm

Mesela ben marshalling ediyorum nesne şöyle olabilir:

private int anInteger; 
private SomeOtherObject; 

ve SomeOtherObject şöyle olabilir:

private long aLong; 
private float aFloat; 
SomeObject şöyle görünebilir

private String aString; 
private List<SomeObject> someObjectList; 

Bu, nesnenin bir sorun haline getirilmemesi ve bir JSON dizesi olarak DB'de depolanması iyi bir şeydir. o DynamoDB Jackson veri almak için zamanı geldiğinde

otomatik JSON alır ve 'someObjectList' bir List<SomeObject> olarak List<LinkedHashMap> değil döndürülür HARİÇ ... geri dönüştürür! Bu Jackson için standart bir davranış, bunun gerçekleştiği bir yanlışlık değil.

Şimdi bu bir soruna yol açıyor. Kod tabanım, List<SomeObject> ile uğraştığını düşünüyor, ancak gerçek şu ki, bir List<LinkedHashMap> işleniyor! Sorum şu: LinkedHashMap'ımı bir 'SomeObject' haline nasıl geri döndürebilirim. Açıkçası bu bir manüel işlemdir, ama demek istediğim, değerleri ayıklayamıyorum bile.

Eğer bunu yaparsam:

for (LinkedHashMap lhm : someObjectList) { 
    // Convert the values back 
} 

Ben someObjectList türü olduğunu söyleyip bir derleme hatası alıyorum 'SomeObject' değil LinkedHashMap.

Eğer bunu yaparsam:

for (SomeObject lhm : someObjectList) { 
    // Convert the values back 
} 

Ben LinkedHashMap 'SomeObject' artığını olamaz bana bir çalışma zamanı hatası alıyorum.

cevap

70

ObjectMapper.convertValue() değerini, değer olarak veya tüm liste için bile kullanabilirsiniz. Bu yaptığın gibi işlevsel olarak aynıdır

POJO pojo = mapper.convertValue(singleObject, POJO.class); 
// or: 
List<POJO> pojos = mapper.convertValue(listOfObjects, new TypeReference<List<POJO>>() { }); 

: Ama dönüştürmek türünü bilmek gerekir

byte[] json = mapper.writeValueAsBytes(singleObject); 
POJO pojo = mapper.readValue(json, POJO.class); 

ancak bunun yerine bir bellek içi olayını kullanarak, verileri JSON olarak gerçek seri önler ara adım olarak dizi.

+0

Ancak, ikinci örnek POJO türüne statik bir başvuru gerektirmez. –

+0

@ BoSøborgPetersen Bunun ile ne demek istediğine emin değilim ... – StaxMan

+0

Awesome. Yapmam gereken tek şey, POJO sınıfının bir varsayılan kurucu içerdiğinden emin olmaktır (diğer parametreli kurucuların mevcut olması durumunda). – Gnana