2010-06-05 17 views
10

java nesnesini, Jackson kullanarak Tomcat/jersey'deki JSON nesnesine dönüştürmeye çalışıyorum. Ve belirli özelliklerin serileştirilmesini (yazma) dinamik olarak bastırmak ister.Jackson - dinamik olarak özelliklerin serileştirilmesini (yazma) bastırıyor

JsonIgnore'u kullanabilirim, ancak çalışma zamanında ihmal kararını vermek istiyorum. Herhangi bir fikir??

Yani aşağıda örnek olarak, ben JSON Kullanıcı nesne seri zaman .. "id" alanını bastırmak için

new ObjectMapper.writeValueAsString(user); 


class User { 

private String id = null; 
private String firstName = null; 
private String lastName = null; 

//getters 
//setters 

}//end class 

cevap

0

Bunu yapmanın herhangi bir yol göremiyorum istiyorum. Hangi özelliklerin sıralı olarak seçileceğine dinamik olarak karar vermeniz gerekiyorsa, nesneleriniz için Map anahtarını manuel olarak oluşturmanızı ve nesnesini doğrudan User nesnesini geçirmekten ziyade Jackson'a iletmenizi öneririm.

+0

Teşekkürler. JSON dizileri oluşturmaya gelince, Harita paterninin de biraz zayıf olduğunu düşünüyorum. Harita map1 = new HashMap (); map1.put ("fname", "Steve"); map1.put ("lname", "Colly"); \t \t Harita map2 = new HashMap (); map2.put ("fname", "Josh"); map2.put ("lname", "Roff"); Liste jsonArray = new ArrayList(); jsonArray.add (map1); jsonArray.add (map2); new ObjectMapper() writeValueAsString (jsonArray) ... üretmiyor ??? [{'fname': 'Steve', 'lname': 'Colly'}, {'fname': 'Josh', 'lname': 'Roff'}] – kapso

+0

@ kapil.isr: Evet öyle, ben Sadece denedim, iyi çalışıyor. Anahtarların sırası farklıdır, ancak bunun nedeni "LinkedHashMap" yerine bir "HashMap" kullanmış olmanızdır. – skaffman

+0

o evet çalışıyor, üzgünüm typo :) çok teşekkürler! – kapso

2

Kontrol

ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

ve

org.codehaus.jackson.annotate.JsonIgnore 

açıklama

Eğer serileştirme üzerinde kimliği görmezden belirli bir türdeki tüm örneklerini istediğinizde sadece çalışacaktır. Gerçekten dinamik (örnek başına kişiselleştirme) istiyorsanız, muhtemelen jackson kütüphanesini kendiniz kesmeniz gerekecektir.

0

JSON Views kullanmayı denediniz mi? Görünümler, farklı profilleri tanımlamak için ek açıklama temelli mekanizmaya izin verir, böylece farklı kullanıcılar için yalnızca biraz farklı görünümlere ihtiyacınız varsa, bu sizin için işe yarayabilir.