Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用FasterXML反序列化带有注释的XML_Java_Xml_Jackson_Pojo_Fasterxml - Fatal编程技术网

Java 如何使用FasterXML反序列化带有注释的XML

Java 如何使用FasterXML反序列化带有注释的XML,java,xml,jackson,pojo,fasterxml,Java,Xml,Jackson,Pojo,Fasterxml,我有以下XML模式: <Courses semester="1"> <Course code="A231" credits="3">Intermediate A</Course> <Course code="A105" credits="2">Intro to A</Course> <Course code="B358" credits="4">Advanced B</Course> &l

我有以下XML模式:

<Courses semester="1">
    <Course code="A231" credits="3">Intermediate A</Course>
    <Course code="A105" credits="2">Intro to A</Course>
    <Course code="B358" credits="4">Advanced B</Course>
</Courses>
这里有两件重要的事情需要注意:

  • 课程对象未包装在标记中
  • 有些属性是属性

  • 我需要如何注释我的对象以获得FasterXML来反序列化此xml

    您必须将
    jackson dataformat xml
    依赖项添加到项目中:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.3.3</version>
    </dependency>
    
    现在,您必须使用
    XmlMapper
    而不是
    ObjectMapper

    JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);
    XmlMapper xmlMapper = new XmlMapper(module);
    
    System.out.println(xmlMapper.readValue(xml, Schedule.class));
    
    上面的脚本打印:

    Schedule [semester=1, courses=[[code=A231, credits=3, name=Intermediate A], [code=A105, credits=2, name=Intro to A], [code=B358, credits=4, name=Advanced B]]]
    

    不幸的是,如果我没记错的话,最近的jackson库中不再有
    @JacksonXmlText
    。您知道如何继续吗?@StefanoScarpanti,在JavaDoc for version中仍然可用。还描述了它是如何工作的,所以它应该在那里。你使用哪个版本?好的,你是对的,我在我的pom 2.9.6 jackson版本中强制使用了这些注释。谢谢
    JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);
    XmlMapper xmlMapper = new XmlMapper(module);
    
    System.out.println(xmlMapper.readValue(xml, Schedule.class));
    
    Schedule [semester=1, courses=[[code=A231, credits=3, name=Intermediate A], [code=A105, credits=2, name=Intro to A], [code=B358, credits=4, name=Advanced B]]]