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