我是靠谱客的博主 优雅时光,这篇文章主要介绍springboot中使用xml,现在分享给大家,希望可以做个参考。

XML

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>6.2.5</version>
</dependency>

参考:

https://github.com/FasterXML/jackson-dataformat-xml#maven-dependency

https://blog.csdn.net/u010349272/article/details/107794486

xml格式化 https://tool.ip138.com/xml/

注解

@JacksonXmlRootElement指定生成xml根标签的名字。用于类名,是xml最外层的根节点。注解中有localName属性,该属性如果不设置,那么生成的XML最外面就是Clazz。

@JacksonXmlProperty指定包装标签名,或者指定标签内部属性名。该注解通常可以不需要,若不用,生成xml标签名称就是实体类属性名称。

但是如果你想要你的xml节点名字,首字母大写。比如例子中的Content,那么必须加这个注解,并且注解的localName填上你想要的节点名字。

最重要的是实体类原来的属性content必须首字母小写!否则会被识别成两个不同的属性。

注解的isAttribute,确认是否为节点的属性

@JacksonXmlElementWrapper用于指定List等集合类,外围标签名;用在非集合类上无效。一般用于list,list外层的标签。若不用的话,useWrapping =false。

@JacksonXmlText指定当前这个值,没有xml标签包裹。用实体类属性上,说明该属性是否为简单内容,如果是,那么生成xml时,不会生成对应标签名称。

@JsonIgnore忽略该实体类的属性,该注解是用于实体类转json的,但用于转xml一样有效,XmlMapper是ObjectMapper的子类

@JacksonXmlCData是为了生成

请求加上

  • Content-Type: application/xml

例子1

@JacksonXmlRootElement(localName = "Employee_Details")
public class Employee {
// private variables or data members of POJO class
private String firstName;
private String lastName;
private int age;
private double salary;
private String designation;
private String contactNumber;
private String emailId;
private String gender;
private String maritalStatus;
// Getter and setter methods
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return this.salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDesignation() {
return this.designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getContactNumber() {
return this.contactNumber;
}
public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}
public String getEmailId() {
return this.emailId;
}
public void setEmailId(String emailId) {
this.emailId = emailId;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMaritalStatus() {
return this.maritalStatus;
}
public void setMaritalStatus(String maritalStatus) {
this.maritalStatus = maritalStatus;
}
}
 @RequestMapping(
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_XML_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE},
value = "/xml")
public Employee xml() {
Employee employee = new Employee();
employee.setFirstName("Vibha");
employee.setLastName("Singh");
employee.setAge(30);
employee.setSalary(75000);
employee.setDesignation("Manager");
employee.setContactNumber("+919999988822");
employee.setEmailId("abc@test.com");
employee.setMaritalStatus("married");
employee.setGender("female");
// Converting a Java class object to XML
XmlMapper xmlMapper = new XmlMapper();
try {
String employeeXml = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(employee);
System.out.println(employeeXml);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return employee;
}
<Employee_Details>
<firstName>Vibha</firstName>
<lastName>Singh</lastName>
<age>30</age>
<salary>75000.0</salary>
<designation>Manager</designation>
<contactNumber>+919999988822</contactNumber>
<emailId>abc@test.com</emailId>
<gender>female</gender>
<maritalStatus>married</maritalStatus>
</Employee_Details>

例子2

@JacksonXmlRootElement(localName = "Class")
public class Group {
Teacher teacher;
@JacksonXmlElementWrapper(localName = "Students") // list外层的标签
@JacksonXmlProperty(localName = "Stu") // 属性标签
List<Student> student;
public Teacher getTeacher() {
return this.teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public List<Student> getStudent() {
return this.student;
}
public void setStudent(List<Student> student) {
this.student = student;
}
}
public class Teacher {
@JacksonXmlProperty(localName = "TypeCode")
private TeacherType teacherTypeCode;
private String name;
private String gender;
private String age;
public TeacherType getTeacherTypeCode() {
return this.teacherTypeCode;
}
public void setTeacherTypeCode(TeacherType teacherTypeCode) {
this.teacherTypeCode = teacherTypeCode;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return this.age;
}
public void setAge(String age) {
this.age = age;
}
}
public class TeacherType {
@JacksonXmlProperty(isAttribute = true, localName = "type")
private String type;
// 不会生成对应标签名称
@JacksonXmlText
private String value;
public TeacherType() {
}
public TeacherType(String type, String value) {
this.type = type;
this.value = value;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
}
public class Student {
@JacksonXmlProperty(isAttribute = true, localName = "stu_id")
private String id;
//学号---属性
private String name;
private String gender;
private String age;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return this.age;
}
public void setAge(String age) {
this.age = age;
}
}
@RequestMapping(
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_XML_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE},
value = "/xml2")
public Group xml2() {
XmlMapper xmlMapper = new XmlMapper();
// 字段为null,自动忽略,不再序列化
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// XML标签名:使用骆驼命名的属性名,
xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
// 设置转换模式
xmlMapper.enable(MapperFeature.USE_STD_BEAN_NAMING);
// 序列化 bean--->xml
Group group = new Group();
Teacher teacher = new Teacher();
teacher.setTeacherTypeCode(new TeacherType("0", "严师"));
teacher.setName("卡卡西");
teacher.setAge("25");
teacher.setGender("1");
Student student1 = new Student();
student1.setId("001");
//学号
student1.setName("鸣人");
student1.setAge("18");
student1.setGender("1");
Student student2 = new Student();
student2.setId("002");
//学号
student2.setName("佐助");
student2.setAge("18");
student2.setGender("1");
Student student3 = new Student();
student3.setId("003");
//学号
student3.setName("小樱");
student3.setAge("18");
student3.setGender("0");
group.setTeacher(teacher);
group.setStudent(Arrays.asList(student1, student2, student3));
String result = null;
try {
result = xmlMapper.writeValueAsString(group);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println("序列化结果:" + result);
return group;
}
<Class>
<teacher>
<name>卡卡西</name>
<gender>1</gender>
<age>25</age>
<TypeCode type="0">严师</TypeCode>
</teacher>
<Students>
<Stu stu_id="001">
<name>鸣人</name>
<gender>1</gender>
<age>18</age>
</Stu>
<Stu stu_id="002">
<name>佐助</name>
<gender>1</gender>
<age>18</age>
</Stu>
<Stu stu_id="003">
<name>小樱</name>
<gender>0</gender>
<age>18</age>
</Stu>
</Students>
</Class>

例子3

@JacksonXmlRootElement(localName = "PARAM_IN")
public class AniamDTO implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("PARAM_IN")
@JacksonXmlProperty(localName = "ITEM")
@JacksonXmlElementWrapper(localName = "ITEM", useWrapping = false)
private List<Item> itemList;
public AniamDTO() {
this.itemList = new ArrayList<>();
}
public void setItem(String key, String value) {
this.itemList.add(new Item(key, value));
}
public List<Item> getItemList() {
return this.itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
@JacksonXmlRootElement(localName = "ITEM")
private static class Item implements Serializable {
private static final long serialVersionUID = -3995642653673867392L;
@JsonProperty("KEY")
@JacksonXmlProperty(localName = "KEY", isAttribute = true)
private String key;
@JsonProperty("VALUE")
@JacksonXmlProperty(localName = "VALUE", isAttribute = true)
private String value;
public Item() {}
public Item(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return this.key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
}
/*
<PARAM_IN>
<ITEM KEY="SERIAL_NO" VALUE="1652205537529"/>
<ITEM KEY="AREA_ID" VALUE="AREA_ID"/>
<ITEM KEY="OPER_ID" VALUE="sa"/>
<ITEM KEY="OPER_NAME" VALUE="sa"/>
<ITEM KEY="LINE_ID" VALUE="LINE_ID"/>
</PARAM_IN>
*/
@RequestMapping(
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_XML_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE},
value = "/aniamDTO")
public AniamDTO aniamDTO() {
AniamDTO aniamDTO = new AniamDTO();
aniamDTO.setItem("SERIAL_NO", String.valueOf(System.currentTimeMillis()));
aniamDTO.setItem("AREA_ID", "AREA_ID");
aniamDTO.setItem("OPER_ID", "sa");
aniamDTO.setItem("OPER_NAME", "sa");
aniamDTO.setItem("LINE_ID", "LINE_ID");
String s = JacksonUtils.obj2Json(aniamDTO);
System.out.println(s);
return aniamDTO;
}
/*{
"PARAM_IN": [
{
"KEY": "SERIAL_NO",
"VALUE": "1652206097510"
},
{
"KEY": "AREA_ID",
"VALUE": "AREA_ID"
},
{
"KEY": "OPER_ID",
"VALUE": "sa"
},
{
"KEY": "OPER_NAME",
"VALUE": "sa"
},
{
"KEY": "LINE_ID",
"VALUE": "LINE_ID"
}
]
}
*/
@RequestMapping(
method = RequestMethod.POST,
value = "/aniamDTO2")
public AniamDTO aniamDTO2() {
AniamDTO aniamDTO = new AniamDTO();
aniamDTO.setItem("SERIAL_NO", String.valueOf(System.currentTimeMillis()));
aniamDTO.setItem("AREA_ID", "AREA_ID");
aniamDTO.setItem("OPER_ID", "sa");
aniamDTO.setItem("OPER_NAME", "sa");
aniamDTO.setItem("LINE_ID", "LINE_ID");
return aniamDTO;
}

XML CSS

https://www.w3school.com.cn/xml/xml_display.asp

XML DTD

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

内部的 DOCTYPE 声明

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to
(#PCDATA)>
<!ELEMENT from
(#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body
(#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

外部文档说明

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

这是包含 DTD 的 “note.dtd” 文件:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

PCDATA:PCDATA 是会被解析器解析的文本

被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们

CDATA:CDATA 是不会被解析器解析的文本

XML Schema

W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema

namespace

xmlns:namespace-prefix="namespaceURI"

此文档带有某个表格中的信息:

<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

此 XML 文档携带着有关一件家具的信息:

<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

这个 XML 文档携带着某个表格中的信息:

<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

此 XML 文档携带着有关一件家具的信息:

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

XML XSLT

最后

以上就是优雅时光最近收集整理的关于springboot中使用xml的全部内容,更多相关springboot中使用xml内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部