Jackson解析xml
Jackson解析xml并不常用,推荐使用Dom4j
导入jar文件:
//基本
jackson-annotations-2.9.9.jar
jackson-core-2.9.9.jar
jackson-databind-2.9.9.jar
//支持XML
jackson-dataformat-xml-2.9.8.jar
jackson-module-jaxb-annotations-2.9.8.jar
stax2-api-3.1.4.jar
一、Java对象转xml
POJO类:
package main.java.StuJackson;
public class Student {
private String id;
private String name;
private String gender;
private String phone;
public Student() {}
public Student(String id, String name, String gender, String phone) {
this.id = id;
this.name = name;
this.gender = gender;
this.phone = phone;
}
//省略getter和setter方法
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
Java对象在转XML时,是根据POJO对象中的getter方法,获取POJO中的字段值,如果某个字段没有getter方法,将不能被解析为XML。另外,还POJO类中需要包括一个所有拥有getter方法的字段的构造器,否则可能导致某个字段序列化失败。
1、POJO转XML格式的String字符串
@Test
public void test1(){
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
Student student = new Student("004","Jack","男","12343464646");
try {
String strXML = xmlMapper.writeValueAsString(student);
System.out.println(strXML);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
结果:
<Student xmlns=""><id>004</id><name>Jack</name><gender>男</gender><phone>12343464646</phone></Student>
2、POJO转成XML文件
@Test
public void test2(){
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
Student student = new Student("004","Jack","男","12343464646");
try {
xmlMapper.writeValue(new File("xml/jack.xml"),student);
} catch (IOException e) {
e.printStackTrace();
}
}
XML文件:
<Student xmlns="">
<id>004</id>
<name>Jack</name>
<gender>男</gender>
<phone>12343464646</phone>
</Student>
3、List转XML文件
@Test
public void test3(){
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
Student student1 = new Student("004","Jack","男","12343464646");
Student student2 = new Student("002","Tom","Male","18765466643");
Student student3 = new Student("003","JackSon","Male","18765477743");
List<Student> students = new ArrayList<>();
students.add(student1);
students.add(student2);
students.add(student3);
try {
xmlMapper.writeValue(new File("xml/students.xml"),students);
} catch (IOException e) {
e.printStackTrace();
}
}
结果:
可以看出,集合中的每个POJO对象,在XML文件中默认使用<item>作为父节点。
<ArrayList xmlns="">
<item>
<id>004</id>
<name>Jack</name>
<gender>男</gender>
<phone>12343464646</phone>
</item>
<item>
<id>002</id>
<name>Tom</name>
<gender>Male</gender>
<phone>18765466643</phone>
</item>
<item>
<id>003</id>
<name>JackSon</name>
<gender>Male</gender>
<phone>18765477743</phone>
</item>
</ArrayList>
二、XML转Java对象
1、XML 格式的String转POJO
@Test
public void test4(){
String strStudent = "<Student xmlns=\"\"><id>004</id><name>Jack</name><gender>男</gender><phone>12343464646</phone></Student>";
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
try {
Student student = xmlMapper.readValue(strStudent,Student.class);
System.out.println(student);
} catch (IOException e) {
e.printStackTrace();
}
}
结果:
Student{id='', name='Jack', gender='男', phone='12343464646'}
2、XML文件转POJO
@Test
public void test5(){
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
try {
Student student = xmlMapper.readValue(new File("xml/jack.xml"),Student.class);
System.out.println(student);
} catch (IOException e) {
e.printStackTrace();
}
}
结果:
Student{id='', name='Jack', gender='男', phone='12343464646'}
3、XML文件转List
@Test
public void test6(){
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
List<Student> students;
try {
students = xmlMapper.readValue(new File("xml/students.xml"),new TypeReference<List<Student>>(){});
for (Student student : students) {
System.out.println(student);
}
} catch (IOException e) {
e.printStackTrace();
}
}
结果:
Student{id='004', name='Jack', gender='男', phone='12343464646'}
Student{id='002', name='Tom', gender='Male', phone='18765466643'}
Student{id='003', name='JackSon', gender='Male', phone='18765477743'}