Jackson学习笔记(二)Jackson解析xml

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'}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值