2013-02-17 52 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