de özel bir şekilde en aşağıdaki POJO var sayalım: (De-) serialize Bean zamanında
class Pojo {
String s;
Object o;
Map<String, String> m;
}
Ve zamanında
, biri dışında tüm özellikleri için varsayılan seri hale getirme/deserialization istiyorum. Tipik olarak, this other question'a benzer şekilde serileştirme yaparken bir alanın kimliğini bir veritabanında değiştirmek istiyorum.Örneğin, ben (örneğin: object1
< => "123" ve object2
< => "456"): Harici bir haritalama elde edilen bir dize tarafından o
değiştirmek istiyor
- serileştirme: okumak
o
ve (eğer öyleyseo
dize "123" olarak serialize,object1
olan) - seri kaldırma değiştirin: "123" okumak geri
o
özgün değerini almak için bazı tabloyu sorgulamak (yaniobject1
), birPojo
objec yenideno = object1
ile t.
Modüllerin bunu yapmanın bir yolu olacağını anlıyorum, ancak otomatik BeanSerializer/Deserializer'ı değiştirilmeye gerek olmayan özellikler için kullanırken bunları nasıl kullanacağımı bilmiyorum.
Birisi bir örnek (hatta var olan) veya alternatif bir yaklaşım verebilir mi?
Notlar:
- değişiklikler derleme zamanında bilinmeyen gibi ek açıklamalar veya Katmalar kullanamaz (yani herhangi bir özellik belirlenemeyen bir şekilde değiştirilebilir olabilir).
- This other question, işi yaptığınız gibi bir CustomSerializerFactory kullanıldığını gösterir. Ne yazık ki, resmi site it is not the recommended approach any more ve bunun yerine bu modüllerin kullanılması gerektiğini gösterir.
Düzenleme
biraz daha net olmak gerekirse, ben mesela Mixins ile aşağıdakileri yapabilirsiniz: Aşağıdaki mixin ile
ObjectMapper mapper = new ObjectMapper(MongoBsonFactory.createFactory());
mapper.addMixInAnnotations(Pojo.class, PojoMixIn.class);
ObjectReader reader = mapper.reader(Pojo.class);
DBEncoder dbEncoder = DefaultDBEncoder.FACTORY.create();
OutputBuffer buffer = new BasicOutputBuffer();
dbEncoder.writeObject(buffer, o);
:
abstract class PojoMixIn {
@JsonIgnore Object o;
}
Ve sonra ekleyin JSON içeriğine gerekli dize. Ama derleme zamanında bilmem gereken, değiştirilmesi gereken o
alanı olduğunu bilmem gerek.
> değişiklikler derleme zamanında bilinmeyen gibi ben ek açıklamaları veya Katmalar kullanamazsınız (yani herhangi özellikler> bir şekilde değişmiş olabilir (ı jakson-mapper-asl-1.9.8 kullandık) bu belirlenemez). Açıklar mısınız lütfen? Çok kafa karıştırıcı, çünkü yukarıdaki "Notlar:" başlığındaki her şey statiktir ve derleme zamanında bilinir. Pojo sınıfları (Pojo) & önceden bilinmeyen alanlar mı? –
Herhangi bir sınıf yapısını üstlenmenin güvenli olmadığını mı öneriyorsunuz? Raw (untyped/simple) veri bağlamasının object JSON yapısını LinkedHashMap ve array JSON yapısını ArrayList
@GlenBest Evet Pojo sınıfı az çok bir şey olabilir. Bir dizenin bir String ile değiştirildiği bir örnek verdim. Ama daha sonra programda, bazı String ile değiştirilmesi gereken '' '' '' '' normalde '' serileştirilmiş olabilir. – assylias