当前位置: 首页 > 面试题库 >

如何使用Jackson将Java对象序列化为xml属性?

孙凌龙
2023-03-14
问题内容

有没有一种方法可以通过杰克逊将xml(例如int)序列化为xml属性?我找不到任何特别的杰克逊或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>

有没有一种方法来获取属性而不是元素?感谢帮助!


问题答案:

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

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

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元素或属性。



 类似资料:
  • 鉴于这种反应: 我怎样才能将数据属性反序列化为像这样的 MapDTO 我已经尝试使用自定义反序列化器,但是按名称获取所有属性,然后基于这些属性和嵌套对象创建一个新的MapDTO对象看起来很麻烦。如果结构发生变化,我必须更改反序列化器和DTO本身。让Jackson从给定的根开始进行反序列化会更容易。我使用Jackson 2.12.4到ResAs的4.4.0。我想避免创建不必要的包装类。

  • 问题内容: 问题在于,每次执行main方法时,a.xml的旧内容都会丢失,并被新的内容替代。如何在不丢失先前信息的情况下将内容附加到a.xml文件? 问题答案: 样例代码

  • 我需要反序列化以下json: 将它的< code>id属性设置为< code>foo_id json属性。 我需要在自定义反序列化程序中执行此操作。实现这一点最简单的方法是什么? 我想以某种方式将json“转换”为 然后将此委托给杰克逊。 在本例中,对象的类型为Foo,但其他对象可能不属于此类。另外,在本例中,json是一个数字,但如果它也是一个字符串,我希望支持。所以,我需要一种通用的方法来做到

  • 我想反序列化这个xml标记: 转换成一个对象(某个java类)。 我有下一堂课: 我用Jackson XML这样做反序列化: 但是它给了我下一个错误: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: unrecognized field “” (class com.test.SomeXml), 未标记为可忽略(一个

  • 我在尝试“反序列化”对象时遇到以下错误: 我需要能够使用这个XStream库序列化/反序列化对象,甚至是那些没有参数构造函数的对象。

  • 问题内容: 嗨,我需要使用Jackson数据格式XMLMapper从JAVA创建XML。XML应该像 但我总是喜欢使用额外的“ <地址> 问题答案: 试试下面的代码