2016-09-20 12 views
2

「シリアル化に関する型情報がありません」というジャックソンの既知の問題に直面しました(http://wiki.fasterxml.com/JacksonPolymorphicDeserialization) それはわかりません。 これは正常に動作します(クラスタイプは正しく設定されています)。シリアル化の後にクラスの型が見つからないのはなぜですか?

@Path("{id}") 
@GET 
public List<POJO> getPOJO(@PathParam("id") BigInteger id) { 
    //get some pojoInstances from db 
    List<POJO> arr = new ArrayList<>(pojoInstances); 
    return arr; 
} 

そして、その一つがこれは根本的な原因の確認するには十分ではありませんが、一般的なルールとして、それが原因Javaの型消去する可能性がある

@Path("{id}") 
@GET 
public Collection<POJO> getPOJO(@PathParam("id") BigInteger id) { 
    //get some pojoInstances from db 
    return new ArrayList<>(pojoInstances); 
} 

答えて

1

動作しません。このクラスの問題を回避する簡単な方法は、ルート値である汎用タイプを使用しないことです。つまり、REST APIを使用してシリアライズまたはデシリアライズするための即値です。代わりに、ListMapなどの汎用タイプを自由に含むPOJOを持つ方がよいでしょう。これにより、多型の型情報の取り扱いに関する多くの問題を回避することができます。

一般的なルートタイプを避ける別の方法として、代わりにJava配列を使用することができます。この場合は、POJO[]です。配列は完全型であり、ジェネリック型ではありません。型情報は常にインスタンスから利用可能です。

関連する問題