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

时间:2019-06-13 11:38:07

标签: java spring-boot spring-mvc hibernate-validator javax.validation

控制器:

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

这将触发@NotNull的Parent.name,但不检查Child.name。 如何使其触发。我尝试了List<@Valid Child> children;并用@Valid注释子类,但不起作用。请帮忙。

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

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

5 个答案:

答案 0 :(得分:2)

尝试添加,

class Parent {
    @NotNull 
    private String name;

    @NotNull 
    @Valid
    List<Child> children;
}

答案 1 :(得分:1)

您是否尝试过这种方法?

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

    @Valid
    List<Child> children;
}

答案 2 :(得分:0)

如果要验证孩子,则必须在属性本身上提及@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;
}

答案 3 :(得分:0)

annotate中的

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

答案 4 :(得分:0)

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

class Parent {
    @NotNull 
    private String name;

    List<@Valid Child> children;
}

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

但是,其他人的建议应该起作用。