概述
Jackson是一个强大工具,可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
注解
@JacksonXmlElementWrapper
可用于指定List等集合类,允许指定用于包装列表和映射属性的XML元素;属性:
- namespace (default: “”) 确定包装器元素使用哪个XML命名空间
- localName 包装元素的本地名称
- useWrapping (default:true) 是否使用包装器元素:通过指定’false’可以禁用使用
@JacksonXmlProperty
允许为属性指定XML命名空间和本地名称;以及属性是作为XML元素还是属性编写。
- namespace (default: “”) 要用于属性元素或属性的XML命名空间
- localName 属性元素或属性的本地名称
- isAttribute (default: false) 属性应序列化为属性(true)还是元素(false)
@JacksonXmlRootElement
允许指定用于包装根元素的XML元素(默认使用值类的“简单名称”)
- namespace (default: “”) 要用于根元素的XML命名空间
- localName 根元素的本地名称
@JacksonXmlText
允许指定将一个属性的值序列化为“未包装”文本,而不是在元素中
- value (default: true) 是否将带注释的属性值序列化为基本XML文本(不包含周围的XML元素)
应用
1.班级类
@Data
@JacksonXmlRootElement(localName="Class")
public class Group {
@JacksonXmlProperty(localName = "Teacher")
Teacher teacher; //教师
@JacksonXmlElementWrapper(namespace = "Student",localName = "Students",useWrapping = true)
@JacksonXmlProperty(localName = "Stu")
List<Student> student; //学生列表
}
2.教师类
@Data
public class Teacher {
@JacksonXmlText
private String name;
@JacksonXmlProperty(localName = "Age",isAttribute = true)
private int age;
}
3.学生类
@Data
public class Student {
@JacksonXmlText
private String name;
@JacksonXmlProperty(localName = "Age",isAttribute = true)
private Integer age;
}
4.转换类
public class XmlToObjectUtil {
public static <T> T convertXmlToObject(String xml, Class<T> beanType){
if(null!=xml&&!"".equals(xml)){
try {
return new XmlMapper().readValue(xml,beanType);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
public static String convertObjectToXml(Object object){
if(object!=null){
try {
XmlMapper xmlMapper = new XmlMapper();
//设置xml格式携带版本和编码信息<?xml version='1.0' encoding='UTF-8'?>
xmlMapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION);
//字段值为null,自动忽略,不再序列化
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return xmlMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
}
5.测试类
1.xml转bean
public static void main(String[] args) {
String xml = "<?xml version='1.0' encoding='UTF-8'?><Class><Teacher Age=\"52\">周老师</Teacher><Students><Stu Age=\"10\">周同学</Stu><Stu Age=\"12\">贾同学</Stu></Students></Class>";
Group group = XmlToObjectUtil.convertXmlToObject(xml, Group.class);
System.out.println(group.toString());
}
测试结果:
2.bean转xml
public static void main(String[] args) {
Group group = new Group();
Teacher teacher = new Teacher();
teacher.setName("周老师");
teacher.setAge(52);
List<Student> studentList = new ArrayList<>();
Student student = new Student();
student.setName("周同学");
student.setAge(13);
Student student1 = new Student();
student1.setName("贾同学");
student1.setAge(14);
studentList.add(student);
studentList.add(student1);
group.setTeacher(teacher);
group.setStudent(studentList);
String s = XmlToObjectUtil.convertObjectToXml(group);
System.out.println(s);
}
测试结果:
<?xml version='1.0' encoding='UTF-8'?><Class><Teacher Age="52">周老师</Teacher><wstxns1:Students xmlns:wstxns1="Student"><Stu Age="13">周同学</Stu><Stu Age="14">贾同学</Stu></wstxns1:Students></Class>