Jackson用于bean和xml的相互转换

概述

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>
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值