У меня проблемы с поддержкой Jacksons JAXB, кажется, что она не маршалирует объекты внутри других объектов?
Это мой код (упрощенный, не получатель / установщик):
@XmlRootElement( name = "identifiableObject" )
class IdentifiableObject {
@XmlAttribute
Integer id;
@XmlElement
String name;
}
@XmlRootElement( name = "a" )
class A extends IdentifiableObject {}
@XmlRootElement( name = "b" )
class B extends IdentifiableObject {
@XmlElement
@XmlJavaType( IdentifiableObjectXmlAdapter.class )
A a;
}
Когда я делаю это с помощью JAXB, у меня нет проблем, все работает нормально. Но когда я пытаюсь сделать маршалинг с Джексоном, кажется, что он видит только аннотации непосредственно на объекте, поэтому он маршаллизирует его так:
{ id: 1, name: "name", a: {} }
Если я добавлю @JsonProperty
к моему IdentifiableObject, он будет работать нормально, но я надеялся этого не делать .. и если я это сделаю, то похоже, что @XmlJavaAdapter
больше не работает над свойством (не так странно, так как я иметь JacksonAnnotationIntrospector
первым в моей паре интроспекторов)
В любом случае .. возможно ли:
(a) Поддерживает ли поддержка Jacksons JAXB глубокую сортировку объектов? (он работает нормально с JacksonAnnotationIntrospector, как уже упоминалось)
(b) Есть ли что-то похожее на XmlAdapter
для Джексона, которое я мог бы подключить?
UPDATE:
Чтобы уточнить, мой ожидаемый результат был:
{
id: 1,
name: "b object",
a: {
id: 2,
name: "a object"
}
}
Это поведение по умолчанию при использовании маршалинга JAXB, но не при выполнении того же для JSON (через интроспектор аннотаций JAXB) * 1024 *
(a) Мое текущее решение здесь состоит в том, чтобы добавить @JsonProperty
почти везде, чтобы вместо этого использовался интроспектор аннотации Джексона (поскольку в моей паре это основной интроспектор), и это работает нормально, но тогда я есть так много аннотаций на каждом получателе.
(b) Я попытался использовать @JsonSerialize
здесь, используя пользовательский JsonSerializer
, но даже если я опущу объект здесь (IdentifiableObject) a;
, он все равно «видит» старую версию a и маршаллизирует все на нем.
-
Morten