[英]How to convert a List of POJOs to XML Elements
我正在使用Spring Boot,并且想将POJO转换为XML。 最简单的方法是什么?
例如,我有一个Person
POJO:
public class Person {
private String firstName;
private String lastName;
//getters/setters
}
如何将List<Person>
转换为此:
<rootElement>
<person>
<firstName>John</firstName>
<lastName>Smith</lastName>
</person>
</rootElement>
我应该使用哪个类来封装它? 杰克逊相当于是JsonNode
从com.fasterxml.jackson.databind
包。 我可以从Spring Boot中使用任何预配置的bean吗?
手动
您可以将提到的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将自动为您进行转换。 例如,此方法的Person返回类型意味着Spring将自动处理personService.findById(id)输出的转换和传输
@GetMapping("/person")
public Person getPerson(@RequestParam("id") String id) {
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 {
private String firstName;
private String lastName;
//getters/setters
}
并制作一个包装它的List类。
@XmlRootElement(name = "Persons_List")
public class Persons_List {
List<Person> persons;
// 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.
jaxbMarshaller.marshal(persons_list,new PrintWriter(System.out));
输出将是:
<Persons_List>
<Person>
<firstName>John</firstName>
<lastName>Smith</lastName>
</Person>
<Person>
<firstName>Will</firstName>
<lastName>Smith</lastName>
</Person>
</Persons_List>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.