2012-06-18 31 views
2

我有一個Spring MVC控制器來生成XML,它會生成沒有任何問題的常規對象。但是,看起來它不能正確支持多態。我想這可能是配置問題。Spring MVC Jaxb2Marshaller沒有正確處理繼承類

這是我的班級層次結構。

abstract class Base { 
    String attr1; 
} 

class Child1 { 
    String attrChild1; 
} 

class Child2 { 
    String attrChild2; 
} 

@XmlRootElement 
class MyList { 

    @XmlElement (name="list") 
    List<Base> lists; 
} 

然後,我將1個Child1實例和1個Child2實例添加到列表中。

如果我手動使用JAXB馬歇爾,它會產生一些這樣的XML

<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="child1"> 
    <attr1>...</attr1> 
    <attrChild1>...</attrChild1> 
</list> 
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="child2"> 
    <attr1>...</attr1> 
    <attrChild2>...</attrChild2> 
</list> 

但是,如果我去到春季,我只會變得

<list> 
    <attr1>...</attr1> 
</list> 
<list> 
    <attr1>...</attr1> 
</list> 

有什麼建議?

這裏是我的控制器類

@RequestMapping(value="/rest/test", method=RequestMethod.GET, produces="application/xml") 
public @ResponseBody MyList getMyList() { 
     MyList myList = ....; 
     // add instance of Child1/2 
     return myList; 
} 

回答

0

嘗試增加:

@XmlSeeAlso({Child1.class, Child2.class}) 
abstract class Base { 
}