子对象

时间:2017-08-10 10:39:11

标签: java spring validation methods

我有一个简单的结构

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;
}

但它会一直有效 - 即使我想保存工作副本。是否有可能有条件地在父对象内有效对象?

3 个答案:

答案 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;

}