JSON serialization/deserialization için Jackson (2.1.1) kullanıyorum. JAXB ek açıklamaları ile mevcut bir dersim var. Bu açıklamaların çoğu doğrudur ve jackson ile olduğu gibi kullanılabilir. Bu sınıfların serileştirilmesini/serileştirilmesini biraz değiştirmek için mix-ins kullanıyorum. Yukarıdaki dayanarakJackson Jaxb Ek Açıklama Önceliği - @JsonProperty overriding @XmlTransient
setAnnotationIntrospector(AnnotationIntrospector.pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector(getTypeFactory())));
, Jackson ek açıklamalar nedeniyle introspectors mertebesinde, JAXB'ın önceliklidir vardır: Benim ObjectMapper Yapıcıda
ben aşağıdakileri yapın. Bu Jackson Jaxb docs dayanmaktadır. Göz ardı edilmesini istediğim alanlar için, karıĢtırmadaki alana @JsonIgnore
eklenmesi gayet iyi çalışıyor. Göz ardı edilmek istemediğim mevcut sınıflarda @XmlTransient
olarak işaretlenmiş birkaç alan vardır. Mix-in alanında alana @JsonProperty
eklemeyi denedim, ancak işe yaramıyor.
public interface FooMixIn {
@JsonIgnore String getBaz(); //ignore the baz property
@JsonProperty String getBar(); //override @XmlTransient with @JsonProperty
}
Bir fikrin nasıl orijinal sınıf değiştirmeden bu sorunu çözmek için:
İştepublic class Foo {
@XmlTransient public String getBar() {...}
public String getBaz() {...}
}
karışıklık içindedir: Burada
orijinal sınıftır? Ben mix-in yaptığı gibi aynı davranışı almak gibipublic class Foo {
@JsonProperty @XmlTransient public String getBar() {...}
@JsonIgnore public String getBaz() {...}
}
:
Ben de onun yerine mix bileşenleri kullanarak üyelerine @JsonProperty ekleyerek test etti. @XmlTransient kaldırılmadığı sürece özellik göz ardı edilir.