为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2022-05-21 20:02:06
我正在使用 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 吗?
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

手动


您可以将提到的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)的输出的转换和传输


 @GetMapping("/person")

public Person getPerson(@RequestParam("id") String id) {

    return personService.findById(id);

}

默认情况下,它将以 JSON 格式为您的有效负载对象提供服务,但您可以通过为Jackson XML 数据格式添加上述依赖项将其更改为 XML


另外将请求标头中的 Accept 类型设置为 Application/XML


查看完整回答
反对 回复 2022-05-21
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

为了将列表直接转换为 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>


查看完整回答
反对 回复 2022-05-21
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信