使用Jackson

时间:2015-05-26 11:46:41

标签: java xml xml-parsing jackson

我有一个XML文件,我想使用Jackson反序列化。但是我得到了上述异常。

   <students>
     <student>
        <Name>Tapishnu2</Name>
        <Age>25</Age>
        <Department>Computer</Department>
     </student>
     <student>
        <Name>Tapishnu1</Name>
        <Age>25</Age>
        <Department>Computer</Department>
     </student>
      <student>
        <Name>Tapishnu2</Name>
        <Age>25</Age>
        <Department>Computer</Department>
     </student>
      <student>
        <Name>Tapishnu3</Name>
        <Age>25</Age>
        <Department>Computer</Department>
      </student>
   </students>

我有像这样的POJO课程

 @JacksonXmlRootElement(localName = "students")
    public class Students {

    @JacksonXmlProperty(localName = "student")  
    private Student[] student;

    /*public Students(){

    }*/

    public Students( Student[] student) {
        super();
        this.student = student;
    }

    public Student[] getStudent() {
        return student;
    }

    public void setStudent(Student[] student) {
        this.student = student;
    }

    @Override
    public String toString() {
        return "students [student=" + Arrays.toString(student) + "]";
      }
    }

     public class Student {
    @JacksonXmlProperty(localName = "Name")
    String Name;

    @JacksonXmlProperty(localName = "Age")  
    String Age;

    @JacksonXmlProperty(localName = "Department")
    String Department;

    public String getName() {
        return Name;
    } 

    public void setName(String Name) {
        this.Name = Name;
    }

    public String getAge() {
        return Age;
    }

    public void setAge(String Age) {
        this.Age = Age;
    }
    public String getDepartment() {
        return Department;
    }
    public void setDepartment(String department) {
        Department = department;
    }

    @Override
    public String toString() {
        return "Student [Name=" + Name + ", Age=" + Age + ", Department="
                + Department + "]";
       }
      }

       Main class 

        file = new File("C://Avatar//Students.xml");
        System.out.println(file.canRead());  
        XmlMapper mapper = new XmlMapper();
        Students openCredentials = mapper.readValue(file, Students.class);

我收到以下错误 com.fasterxml.jackson.databind.JsonMappingException:找不到类型[simple type,class com.Team.Students]的合适构造函数:无法从JSON对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息) ?)  在[来源:C:\ Avatar \ Students.xml; line:2,column:3]

我想注释有问题。我是杰克逊的新手。所以我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

Jackson需要一个no-arg构造函数来将JSON反序列化为Java对象。在反序列化过程中,Jackson直接使用属性/方法而不是构造函数。

尝试添加

public Students() {
    super();
    this.student = new Student[]{};
}

或者

public Students() {
    this(new Student[]{});
}