Jerseyを使用してRESTサービスを作成しています。@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)が応答が返されたときに動作しない
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("promotions/")
public List<Promotion> getClosestPromotions() {
List<Promotion> promotions = getPromotions(); //here I get some objects
return promotions;
}
は、私が「@class」フィールドのでJSON文字列を取得します:私は、オブジェクトのリストを返すとき、それに
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
ありがとう:私は、注釈を持つ抽象クラスの推進を持っていますそのリストのすべてのオブジェクト。
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("promotions/")
public Response getClosestPromotions() {
List<Promotion> promotions = getPromotions(); //here I get some objects
return Response.ok().entity(promotions).build();
}
私はほとんど同じリストを取得しますが、追加の「@class」フィールドなしだ:しかし、問題は、私は応答を返す場合ということです。 これはなぜですか、また、レスポンスでリストを返す "@class"フィールドを持つリストを取得するにはどうすればよいですか? そして、驚くべきことに、エンティティとして指定された1つのPromotionオブジェクトを持つResponseを返すときに動作し、その "@class"フィールドを取得します。
私はまだなく、答えのための十分なを持っていません。エンティティメソッドはObjectを受け取ります。基礎となるコードは、おそらく実行時にタイプ情報を回復するためにタイプを検査します。残念なことに、これはListとしてListではありません。それはジェネリック型情報なしでそれをリストとして書くので、あなたはクラスフィールドを失います。メンバ変数としてリストを持つオブジェクトを書くことはおそらく動作しますが、私は何かクリーナーを思いついています。 –