簡體   English   中英

如何將POJO列表轉換為XML元素

[英]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>

我應該使用哪個類來封裝它? 傑克遜相當於是JsonNodecom.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM