我想获取一个对象作为 POST 请求的参数。我有一个抽象超类,它被称为Promotion
子类Product
和Percent
. 这是我尝试获取请求的方式:
@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>
我尝试将其转换为 Product(在这种情况下,字段“标记”和“距离”来自 Promotion 类,“priceBefore”来自 Product 类)我得到一个例外:
java.lang.ClassCastException: Percent cannot be cast to Product.
似乎Percent
被选为“默认”子类。为什么会这样,我怎样才能得到一个对象Product
?