java - Jackson XML - 使用 namespace 前缀反序列化 XML

标签 java xml jackson

我正在使用 Jackson XML 插件 ( https://github.com/FasterXML/jackson-dataformat-xml ),我不确定它是否受支持,但我想知道是否可以使用命名空间前缀序列化和反序列化 XML,如下所示:

<name:Foo>
  <name:Bar>
    <name:x>x</name:x>
    <name:y>y</name:y>
  </name:Bar>
</name:Foo>

我可以像这样使用 Jackson 的插件生成这种类型的 XML:

@JacksonXmlProperty(localName="name:Bar")
public Bar getBar() {
    return bar;
}

但是,我找不到配置我的 POJO 以从生成的 XML 反序列化的方法。请看下面的示例代码:

public class Bar{
    @JacksonXmlProperty(localName="name:x")
    public String x = "x";
    @JacksonXmlProperty(localName="name:y")
    public String y = "y";
}

@JacksonXmlRootElement(localName="name:Foo")
    public class Foo{
        private Bar bar;

        @JacksonXmlProperty(localName="name:Bar")
        public Bar getBar() {
           return bar;
        }

        public void setBar(Bar bar) {
            this.bar = bar;
        }   
}

public class TestDeserialization {

    public static void main(String[] args) throws Exception {
        Foo foo = new Foo();
        foo.setBar(new Bar());

        XmlMapper xmlMapper = new XmlMapper();
        String xml = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(foo);
        System.out.println(xml);
        System.out.println("XML Desearialzing....");
        Foo foo2= xmlMapper.readValue(xml, Foo.class);
        System.out.println(xmlMapper.writeValueAsString(foo2));
     }
}

尝试运行此测试时出现异常:

Exception in thread "main" java.io.IOException: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "name"

这是可以理解的,但我想知道是否有办法让它与 Jackson XML 一起工作?

最佳答案

JacksonXmlProperty 注释具有属性 namespace。用它来定义 namespace

public class Bar {
    @JacksonXmlProperty(namespace = "name",localName="x")
    public String x = "x";
    @JacksonXmlProperty(namespace = "name",localName="y")
    public String y = "y";
} 

@JacksonXmlRootElement(namespace = "name", localName = "Foo")
public class Foo {
   private Bar bar;

   @JacksonXmlProperty(namespace = "name", localName = "Bar")
   public Bar getBar() {
      return bar;
   }

   public void setBar(Bar bar) {
      this.bar = bar;
   }
}

关于java - Jackson XML - 使用 namespace 前缀反序列化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16442805/

相关文章:

java - 如何从 ResultSet 的行中的列获取 int[] 数组?

json - Spring MVC 中的 Jackson Object Mapper 无法正常工作

java - jackson : concatenate several keys for a field

javascript - 在 xml 标签中传递 base64 图像字符串

java - spring security - 如何提供拦截 URL 的列表

java - 如何使用 Jackson JSON 将 JSON 字符串转换为 Map<String, String>

java - 获取表格中单元格的X和Y坐标

javascript - 改造成功方法的空响应

java - Spring "The prefix "tx“对于元素 "tx:annotation-driven"未绑定(bind)。”

c# - 同一方法.net core web api上的多种类型[FromBody]