jackson 使用XMLMapper重命名XML标记

oalqel3c  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(371)

我使用Jackson XMLMap器将对象转换为XML

ArrayList<Person> temp = new ArrayList<Person>();
Person a = new Person(12);
temp.add(a);

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.writeValue(path, temp);

Person类看起来像:

public class Person{

private int age;

    public Person(int age){
    this.age = age
    }
}

XML如下所示:

<ArrayList>
    <item>
        <age>12</age>
    </item>
</ArrayList>

如何重命名“ArrayList”和“item”标记?

kyks70gy

kyks70gy1#

您可以为Person列表创建一个 Package 类。

// imports used
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

   static class Person {

    private int age;

    Person() {
    }

    Person(int age) {
      this.age = age;
    }

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }
  }

  @JacksonXmlRootElement(localName = "people")
  static class People {

    @JacksonXmlProperty(localName = "person")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Person> people = new ArrayList<>();

    public List<Person> getPeople() {
      return people;
    }

    public void setPeople(List<Person> people) {
      this.people = people;
    }
  }

  public static void main(String[] args) throws IOException {
    People people = new People();
    Person person = new Person(12);
    people.setPeople(List.of(person));

    XmlMapper xmlMapper = new XmlMapper();
    xmlMapper.writeValue(new File("people.xml"), people);

  }

最重要的是:

@JacksonXmlProperty(localName = "person")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Person> people = new ArrayList<>();

在类People中,这是你的 Package 类,你说你有一个Person的列表,但是你不想用同样的名字 Package 另一组标记。
此外,当您添加 Package 类时,生成的xml标记将使用大写的P(即<People>)。
因此,对于这种情况,我们可以在声明类之前添加@JacksonXmlRootElement,这样就可以根据需要对其进行重命名(我在这里所做的只是将xml标记降低为<people>
产生的xml:

<people>
  <person>
    <age>12</age>
  </person>
</people>
sdnqo3pr

sdnqo3pr2#

以防万一,有人需要这样的东西。

<onlinebestellung>
   <positionen>
     <artikel>
       <artikelnummer>articleId</artikelnummer>
       <description>"your description here</description>
     </artikel>
   </positionen>
 </onlinebestellung>

...您可以使用jackson尝试执行此操作:

@JacksonXmlRootElement(localName = "onlinebestellung")
public class OrderTest {
   @JacksonXmlElementWrapper(useWrapping = true, localName = "positionen")
   @JacksonXmlProperty(localName = "artikel")
   private List<Article> position;
}

public class Article {
    private String artikelnummer;
    private String description;
}

相关问题