2015-05-28 33 views
3

我定義jackoson串行並將其添加到Java類JsonDeserialize這樣的:不兼容的類型一般

@JsonDeserialize(using = ReportFilterDeserializer.class) 

編譯器把這個錯誤:

error: incompatible types: Class<ReportFilterDeserializer> cannot be converted to Class<? extends JsonDeserializer<?>> 
@JsonDeserialize(using = ReportFilterDeserializer.class) 

註釋的Def是:

public Class<? extends JsonDeserializer<?>> using() default JsonDeserializer.None.class; 

如果我從ReportFilterDeserializer中刪除通用的atttibute其傳遞的編譯。我不明白爲什麼編譯器會抱怨。

class ReportFilterDeserializer<T> extends JsonDeserializer<ReportFilter<T>> { 
    @Override 
    public ReportFilter<T> deserialize(JsonParser jsonParser,DeserializationContext arg1) throws IOException,JsonProcessingException { 
     return null; 
    } 
} 
+0

如何爲這個序列化對象的申報代碼是什麼樣子? – MaxZoom

+0

你如何計劃實施'反序列化'?你如何確定JSON內的'T'? –

+0

你可以看看這個: http://stackoverflow.com/questions/17979346/jackson-read-json-in-generic-list 這是我如何實現。這個問題是關於泛型的,所以我們放下json isssue。 – user1236097

回答

0

這當然看起來很奇怪。關於唯一我能想到的是Jackson 1.x和2.x註釋與類的偶然混合(org.codehaus.jackson是1.x,com.fasterxml.jackson 2.x)。

行爲是否對不同的JDK不同(7,8分,例如 - 也許Java的8有問題?)

+0

它的Java 8和我把它分開課程和wanst成功: @Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.FIELD,ElementType。 TYPE,ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface Test { public Class <?擴展JsonDeserializer >使用() 默認JsonDeserializer.None.class; } – user1236097

+0

我只能說這看起來更像是一個Java 8的bug,而不是傑克遜所做的。 :-( – StaxMan

+0

...尤其是因爲該代碼在Java 7上編譯正常。 – StaxMan