Как сериализовать объект java как атрибут xml с помощью jackson?

есть ли способ сериализовать java var (например, int) через jackson в качестве атрибута xml? Я не могу найти аннотацию spezific jackson или json (@XmlAttribute @пакета javax.XML.связывать.аннотация.XmlAttribute), чтобы понять это.

например

public class Point {

    private int x, y, z;

    public Point(final int x, final int y, final int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    @javax.xml.bind.annotation.XmlAttribute
    public int getX() {
        return x;
    }
    ...
}

что хочется:

<point x="100" y="100" z="100"/>

но все, что я получил это:

<point>
    <x>100</x>
    <y>100</y>
    <z>100</z>
</point>

есть ли способ получить атрибуты вместо элементов? Спасибо за помощь!

2 ответов


хорошо, я нашел решение.

не было необходимости регистрировать AnnotaionIntrospector если вы используете jackson-dataformat-xml

File file = new File("PointTest.xml");
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.writeValue(file, new Point(100, 100, 100));

отсутствует тег

@JacksonXmlProperty (isAttribute=true)

поэтому просто измените геттер на:

@JacksonXmlProperty(isAttribute=true)
public int getX() {
    return x;
}

и он отлично работает. Просто следуйте этому, как:

https://github.com/FasterXML/jackson-dataformat-xml

@JacksonXmlProperty позволяет указать пространство имен XML и локальное имя для свойство; а также должно ли свойство быть записано как XML элемент или атрибут.


вы зарегистрированы JaxbAnnotationIntrospector?

ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
// make deserializer use JAXB annotations (only)
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
// make serializer use JAXB annotations (only)
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);