4
我想獲得一個對象作爲POST請求的參數。我有一個抽象超類,名爲Promotion
和子類Product
和Percent
。以下是我試圖讓一個請求:澤西島,JAXB和獲取對象作爲參數擴展抽象類
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@Path("promotion/")
public Promotion createPromotion(Promotion promotion) {
Product p = (Product) promotion;
System.out.println(p.getPriceAfter());
return promotion;
}
這裏就是我的班定義使用JAXB:
@XmlRootElement(name="promotion")
@XmlSeeAlso({Product.class,Percent.class})
public abstract class Promotion {
//body
}
@XmlRootElement(name="promotion")
public class Product extends Promotion {
//body
}
@XmlRootElement(name="promotion")
public class Percent extends Promotion {
//body
}
所以,現在的問題是,當我發送POST請求以這樣的身體:
<promotion>
<priceBefore>34.5</priceBefore>
<marked>false</marked>
<distance>44</distance>
</promotion>
,我嘗試將其轉換爲產品(在這種情況下,字段「標記」和「距離」是從推廣類和「priceBefore」是從產品類)我得到一個異常:
java.lang.ClassCastException: Percent cannot be cast to Product.
看起來好像Percent
被選爲'默認'的子類。爲什麼是這樣的,我怎樣才能得到一個Product
的物體?
您在更新寫什麼是工作,我以前嘗試過,但我想所有子類被稱爲「促銷'所以我嘗試了你發佈的第一件事。所以我補充說: xmlns:xsi =「http://www.w3.org/2001/XMLSchema-instance」xsi:type =「product」 我的POST正文,但遺憾的是我仍然得到相同的異常。我應該在旁邊添加一些其他的東西嗎? – krajol
@krajol - 當你對'Product'的一個實例進行get操作時,你會得到什麼迴應? –
然後我得到例如: '<?XML版本= 「1.0」 編碼= 「UTF-8」 獨立= 「是」> 真 33.0 34.5 priceBefore> ' –
krajol