我有一个简单的结构
public class Parent {
@Size(min = 5, max = 10)
String lastName;
List<Child> childs;
}
public class Child {
@Size(min = 5, max = 10)
String firstName;
@Size(min = 1, max = 18)
Integer age;
}
和定义方法
@ResponseBody
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces="application/json")
public RestResponse create(@RequestBody Parent object)
创建(并提供更新)父对象的可能性。
让我们假设我想创建两个功能:
1)要创建工作副本 - 用户无需正确插入所有数据。
2)向我发送这些数据 - 在这个例子中,如果它们是正确的,我想要有效。
我发现有一种方法可以通过在方法定义中的参数中添加@Valid注释来验证它,如下所示:
@ResponseBody
@RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces="application/json")
public RestResponse create(@RequestBody @Valid Parent object)
但它只对父字段有效,跳过子节点。我可以在子列表中添加@Valid注释:
public class Parent {
@Size(min = 5, max = 10)
String lastName;
List<Child> childs;
}
但它会一直有效 - 即使我想保存工作副本。是否有可能有条件地在父对象内有效对象?
答案 0 :(得分:0)
我会添加@Valid
并始终对其进行验证。如果您不关心有效的孩子,可以将BindingResult bindingResult
添加到控制器方法以防止默认验证,并通过错误列表忽略无效的孩子。
使用bindingResult.hasFieldErrors(fieldName)
方法。
或者你可以创建另一个ParentExt扩展Parent并在getter而不是在字段上添加@Valid
。
答案 1 :(得分:0)
嗯......这可以通过椭圆验证框架实现。它看起来一样,但为你提供更多功能。
http://oval.sourceforge.net/userguide.html#declaring-conditional-constraints
@AssertValid(当 =&#34;某事!= null&#34;) - 类似的东西
如果没有,那么在某些情况下你应该使用标准的Validator类。
答案 2 :(得分:0)
只需将@Valid添加到您的childList中,它应该可以工作
public class Parent {
@Size(min = 5, max = 10)
String lastName;
@Valid
List<Child> childs;
}