Я пытаюсь установить имя подкласса в качестве имени элемента XML в сериализованном XML-контенте, используя Джексон следующим образом.Сериализация Джексона с использованием JsonTypeInfo WRAPPER_OBJECT
public interface Animal {
public String getName();
}
public class Dog implements Animal {
private String name;
public String getName(){
return name;
}
}
public class Cat implements Animal {
private String name;
public String getName(){
return name;
}
}
public class Zoo {
@JacksonXmlElementWrapper(useWrapping = false)
@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME)
private List<Animal> animals;
// getters and setters
}
Результат:
<Zoo>
<animals>
<Dog>
<name>xyz</name>
</Dog>
</animals>
<animals>
<Cat>
<name>abc</name>
</Cat>
</animals>
</Zoo>
Добавляя @JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME)
, я могу установить имя класса в качестве объекта оболочки. Можно ли устранить <animal/>
обертку и генерировать XML в формате ниже:
<Zoo>
<Dog>
<name>xyz</name>
</Dog>
<Cat>
<name>abc</name>
</Cat>
</Zoo>
Это имя списка, поэтому вы не можете этого сделать. Вы пытаетесь нарушить правила сериализации. – mtyurt
Спасибо за ваш ответ ... Поскольку мы добавляем WRAPPER_OBJECT, используя @JsonTypeInfo, оболочка списка не требуется. Это может быть достигнуто в JAXB с помощью @XmlElements ({@XmlElement()}) аннотаций. Интересно, можем ли мы добиться этого в Джексоне (возможно, путем реализации пользовательской сериализации?). Поделитесь своими мыслями ... – dinup24