9

有没有办法通过jackson将java var(例如int)序列化为xml属性?我找不到任何特定的 jackson 或 json 注释(@XmlAttribute @javax.xml.bind.annotation.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>

有没有办法获取属性而不是元素?感谢帮助!

4

2 回答 2

15

好的,我找到了解决方案。

如果您使用 jackson-dataformat-xml,则无需注册 AnotaionIntrospector

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

缺少的 TAG 是

@JacksonXmlProperty(isAttribute=true)

所以只需将吸气剂更改为:

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

它工作正常。只需按照以下方法:

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

@JacksonXmlProperty 允许为属性指定 XML 命名空间和本地名称;以及是否将属性编写为 XML 元素或属性。

于 2013-02-05T18:44:30.217 回答
1

你注册了 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);
于 2013-02-05T17:18:21.427 回答