6

控制器:

@RequestMapping(...)
public void foo(@Valid Parent p){
}
class Parent {
  @NotNull // javax.validation.constraints.NotNull
  private String name;
  List<Child> children;
}

class Child {
  @NotNull
  private String name;
}

这会触发@NotNullParent.name,但不会检查 Child.name。如何让它触发。我也试过List<@Valid Child> children;用注释来注释子类@Valid,不起作用。请帮忙。

parent = { "name": null }失败。名称不能为空。

child = { "name": null }作品。

4

5 回答 5

7

你有没有这样尝试过:

class Parent {
    @NotNull // javax.validation.constraints.NotNull
    private String name;

    @Valid
    List<Child> children;
}
于 2019-06-13T11:44:06.777 回答
4

尝试添加,

class Parent {
    @NotNull 
    private String name;

    @NotNull 
    @Valid
    List<Child> children;
}
于 2019-06-13T12:07:49.047 回答
2

如果要验证孩子,则必须在属性本身中提及 @Valid

家长班

class Parent {
  @NotNull // javax.validation.constraints.NotNull
  private String name;

  @NotNull // Not necessary if it's okay for children to be null
  @Valid // javax.validation.Valid
  privateList<Child> children;
}

儿童班

class Child {
  @NotNull
  private String name;
}
于 2019-06-13T12:13:11.013 回答
1

对于 Bean Validation 2.0 和 Hibernate Validator 6.x,建议使用:

class Parent {
    @NotNull 
    private String name;

    List<@Valid Child> children;
}

我们支持@Valid和限制容器元素。

但是,其他人的建议应该可行。

于 2019-06-13T15:45:44.493 回答
0

annotateParent您的列表中@Valid添加@NotEmptyor@NotBlank@NotNullto Child。Spring 会很好地验证它。

class Parent {
    @NotNull // javax.validation.constraints.NotNull
    private String name;

    @Valid
    List<Child> children;
}

class Child {
  @NotNull
  private String name;
}
于 2019-06-13T12:23:05.850 回答