2 回答

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

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>
添加回答
舉報