2013-02-17 55 views
0

如何驗證使用Hibernate驗證器爲JSON負載中出現多次的元素綁定到使用驗證器註釋進行註釋的Java類?字符串的Java驗證器

比方說,我有以下幾點:

class Person { 
String name; 
int age; 
} 

我綁定JSON到人。

的JSON有效載荷如下所示:

{ 
"name":"someName", 
    "age":30 
} 

假設有效載荷具有2「名稱」字段重複如下。

{ 
    "name":"someName", 
    "name" : "otherName", 
     "age":30 
} 

然後我喜歡用驗證器來驗證這一點。如果使用@Size(min = 1,max = 1),它將適用於Collection對象。

我想知道如何讓這項工作的字符串。使用String @Size會嘗試查找字符串內容的長度,而不是查找有效內容中字符串內容的次數。

謝謝你的時間!

回答

1

這是不可能的。 JSON反序列化和Bean驗證是兩個完全不同的東西。當你的Hibernate驗證全部發現時,它是一個Person對象,只有一個名字字段。

這是您的JSON庫的行爲,它將確定哪個「名稱」字段將被反序列化到Java bean中(或者是否會拋出異常)。大多數情況下,如果您想驗證沒有提供重複項,那麼您將需要編寫一些自定義的反序列化代碼。

+0

我嘗試使用Google GSON和Jackson自定義解串器。我發現,進入自定義反序列化器重寫方法的JsonNode對象已經獲得了相應框架所吞噬的副本。我認爲我應該在方法中完全訪問底層的JSON負載,而不是這種情況。因此,自定義反序列化可能無法在這裏工作,除非我們向後退一步訪問框架代碼中的解析組件。 – serverfaces 2013-02-17 22:17:21