2014-02-16 46 views
3

我有以下對象結構:如何使用傑克遜泛型

public class Animal<T> implements IMakeSound<T> 
public class Dog<T> extends Animal<T> 
public class Cat<T> extends Animal<T> 

我想序列,並使用傑克遜去序列化我的對象。
問題是,在JSON中,我在T中獲取LinkedHashmap,並且de-sirializtion是基礎對象Animal。

當我加入限制到T,即比它的作品,因爲傑克遜的註解

@JsonSubTypes({ 
    @Type(value = PuffyTail.class, name = "puffyTail"), 
    @Type(value = StraightTail.class, name = "straightTail") }) 
class Tail { 
... 

的完美,但不是我想要的行爲 - 我不使用< X Y延伸>。

有沒有辦法使用java泛型並獲得序列化的正確對象?
有沒有辦法在沒有註釋的情況下完成它?

+1

因爲泛型是編譯時類型擦除你需要提供線索傑克遜爲如何建立泛型類型。 –

回答

2

,以解析正確類型的對象讀取從ObjectMapper值時,您可以指定一個TypeReference:

Cat<PuffyTail> fluffyKitty = objectMapper.readValue(jsonString, 
     new TypeReference<Cat<PuffyTail>>(){});