猿问

如何将 POJO 列表转换为 XML 元素

我正在使用 Spring Boot,我想将 POJO 转换为 XML。最简单的方法是什么?


例如,我有一个PersonPOJO:


public class Person {

  private String firstName;

  private String lastName;

  //getters/setters

}

如何将 a 转换List<Person>为:


<rootElement>

  <person>

    <firstName>John</firstName>

    <lastName>Smith</lastName>

  </person>

</rootElement>

我应该使用什么类来封装它?杰克逊的等价物JsonNode来自com.fasterxml.jackson.databind包装。我可以从 Spring Boot 中使用任何预配置的 bean 吗?


胡说叔叔
浏览 170回答 2
2回答

一只名叫tom的猫

手动您可以将提到的Jackson 库与 XML 数据格式一起使用:implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.8'序列化:Person person = new Person("Ima", "Person")XmlMapper xmlMapper = new XmlMapper();String personXml = xmlMapper.writeValueAsString(person);反序列化:XmlMapper xmlMapper = new XmlMapper();Person person = xmlMapper.readValue(personXml, SimpleBean.class);通过 REST API我将这一部分留在这里,因为它可能与使用 SpringBoot 作为 Web 服务器的其他人相关:或者,如果您使用标准 spring-boot-starter-web 并希望通过 REST API 提供输出 XML,那么 Spring 将自动为您进行转换。eg.该方法的Person返回类型表示Spring会自动处理personService.findById(id)的输出的转换和传输&nbsp;@GetMapping("/person")public Person getPerson(@RequestParam("id") String id) {&nbsp; &nbsp; return personService.findById(id);}默认情况下,它将以 JSON 格式为您的有效负载对象提供服务,但您可以通过为Jackson XML 数据格式添加上述依赖项将其更改为 XML另外将请求标头中的 Accept 类型设置为 Application/XML

神不在的星期二

为了将列表直接转换为 xml,我使用javax.xml.bind.marshaller.您可以如下注释您的 pojo 类@XmlRootElement("Person")@XmlAccessorType(XmlAccessType.FIELD)public class Person {&nbsp; &nbsp; private String firstName;&nbsp; &nbsp; private String lastName;&nbsp; &nbsp; //getters/setters}并制作一个包装它的 List 类。@XmlRootElement(name = "Persons_List")public class Persons_List {&nbsp; &nbsp; List<Person> persons;&nbsp; &nbsp; // Getters and Setters}您可以在您的方法中使用 Jaxb,如下所示。List<Person> persons = new List<Person>();// add Person elements to it.persons.add(person1);persons.add(person2);Persons_List persons_list = new Persons_List();persons_list.setPersons(persons);JAXBContext context = JAXBContext.newInstance(Persons_List.class, Person.class);Marshaller jaxbMarshaller = context.createMarshaller();jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//if you want to output to file.OutputStream os = new FileOutputStream( "Person.xml" );jaxbMarshaller.marshal(persons_list, os);//if you want to display in console.&nbsp;jaxbMarshaller.marshal(persons_list,new PrintWriter(System.out));输出将是:<Persons_List>&nbsp; &nbsp;<Person>&nbsp; &nbsp; &nbsp; &nbsp;<firstName>John</firstName>&nbsp; &nbsp; &nbsp; &nbsp;<lastName>Smith</lastName>&nbsp; &nbsp;</Person>&nbsp; &nbsp;<Person>&nbsp; &nbsp; &nbsp; &nbsp;<firstName>Will</firstName>&nbsp; &nbsp; &nbsp; &nbsp;<lastName>Smith</lastName>&nbsp; &nbsp;</Person></Persons_List>
随时随地看视频慕课网APP

相关分类

Java
我要回答