@Valid(javax.validation.Valid) 对于list的类型是不递归的

@Valid (javax.validation.Valid) is not recursive for the type of list

控制器:

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

这会触发 Parent.name 的 @NotNull,但不会检查 Child.name。 如何让它触发。我试过 List<@Valid Child> children; 也用 @Valid 注释对 Child class 进行注释,但不起作用。请帮忙。

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

child = { "name": null } 有效。

你试过这样吗:

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

    @Valid
    List<Child> children;
}

尝试添加,

class Parent {
    @NotNull 
    private String name;

    @NotNull 
    @Valid
    List<Child> children;
}

如果你想验证 child 那么你必须对属性本身提及 @Valid

Parent Class

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

Child class

class Child {
  @NotNull
  private String name;
}

annotateParent 您的列表中 @Valid 并添加 @NotEmpty@NotBlank@NotNullChild。 Spring 会很好地验证它。

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

    @Valid
    List<Child> children;
}

class Child {
  @NotNull
  private String name;
}

使用Bean Validation 2.0和Hibernate Validator6.x,推荐使用:

class Parent {
    @NotNull 
    private String name;

    List<@Valid Child> children;
}

我们支持 @Valid 和容器元素中的约束。

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