2011-11-15 24 views
0

我一直在我自己的小項目中使用json協議的傑克遜實現,現在它已經很好用了,直到我決定(第一次)序列化一個無國籍的對象。使用傑克遜序列化無狀態對象時的異常Json

我知道這可能聽起來很奇怪,我爲什麼要發送無狀態對象?我序列化的是對服務器的請求,而這個特定的服務器不包含任何字段,只是在服務器端編寫指令。我的模型可以採取任何ClientRequest實現並將其稱爲perform()方法。即使請求沒有字段,我也希望它能夠正常工作。

代碼如下所示:

public class GetWallInputsRequest implements ClientRequest<List<WallInput>> 
{ 
    @JsonCreator public GetWallInputsRequest() 
    { 
    } 

    @Override public ServerResponse<List<WallInput>> perform() 
    { 
     return new WallMessageResponse(Wall.WALL.getInputs()); 
    } 
} 

我得到JsonMappingException:未找到類GetWallInputsRequest串行器。 谷歌不幫我,這讓我想知道我是不是愚蠢。可悲的是我沒有看到一個辦法。

我解決了它後,大量的蠻力嘗試不同的事情。而通過解決它,我的意思是沒有想出來,但使其工作。通過添加該行:

@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE) 

上面的類聲明它似乎工作。爲什麼這是必要的我不知道,但現在它發送一個空的JSON字符串,而不是崩潰。

+0

歡迎StackOverflow上。如果您已經解決了您的問題,我們感謝您將解決方案作爲答案發布,然後接受您自己的答案。這可以防止您的問題出現在未解答的問題列表中。 –

+0

@Bystam - 你有問題嗎? –

回答

0

文檔說

值,表示沒有訪問修飾符是自動檢測:這個可以用來明確禁用自動檢測指定的類型。

由於您的課程沒有包含任何明確的標記來告訴Jackson有序列化的字段或方法,因此它確定沒有什麼可以查找的。如果沒有這個,我猜想,它會預計東西,正如所引用的文件中所建議的。

http://jackson.codehaus.org/1.9.0/javadoc/org/codehaus/jackson/annotate/JsonAutoDetect.Visibility.html