POST リクエストのパラメータとしてオブジェクトを取得したい。Promotion
サブクラスProduct
and と呼ばれる抽象スーパークラスを取得しました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 にキャストしようとしました (この場合、フィールド 'marked' と 'distance' は Promotion クラスからのもので、'priceBefore' は Product クラスからのものです) 例外が発生します:
java.lang.ClassCastException: Percent cannot be cast to Product.
Percent
「デフォルト」サブクラスとして選択されているようです。それはなぜですか、また、オブジェクトを取得するにはどうすればよいProduct
ですか?