JAXB不能反序列化成子类对象的问题

JAXB不能反序列化成子类对象的问题

眼眸 发布于 2021-11-24 字数 1360 浏览 756 回复 1

使用JDK7内置的JAXB-RI 去反序列化一段xml:

<person><name>tom</name><age>30</age><no>1a1a</no></person>

对应的POJO类是Person , Student父子两个类:

@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
    
    protected String name;
    
    protected int age;

    // getter and setter
}

//------------------------------

@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Student extends Person {
    
    private String no;
    
    // getter and setter

}

测试代码如下:

JAXBContext jc = JAXBContext.newInstance(Student.class,Person.class);
        Unmarshaller u = jc.createUnmarshaller();
        
        Object o = u.unmarshal(new StringReader(xml));
        
        Assert.assertTrue(o instanceof Person);
        System.out.println(o);

反序列化出来的o是一个Person父类的对象:

org.jaxb.demo.Person@3775f532

这里如何处理才能得到子类Student的对象那?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

复古式 2021-11-25 1 楼

晕。。。自己找到答案了。

JAXBContext.newInstance(...); 的时候把父类的class放在子类前面,这样JAXB会自动计算反序列化的先后顺序:

JAXBContext.newInstance(Person.class, Student.class);