java嵌套验证参数不生效的情况

今天在嵌套验证参数(限制参数长度)的时候 ,遇到了注解不生效的情况。

例如:一个实体类A中嵌套了另外一个实体类B。

A:

public class A{
    @NotNull(message = "姓名不能为空")
    private String name;
 
    @NotNull(message = "年龄不能为空")
    private Integer age;
 
    @NotEmpty(message = "老师不能为空")
    private B teacher;
 }

B:

public class B{
   
    @NotNull(message = "老师名字不能为空")
    private String tName;
 
    @NotNull(message = "老师年龄不能为空")
    private Integer tAge;
 
    @NotNull(message = "课程数量不能为空")
    @Size(Max=10,message="最大数量为10")
    private Integer num;
}

描述: 要限制"课程数量"的大小,我们加了"@Size"注解,结果是"@Size"不生效。

如果 A实体的 teacher属性不加 @Valid注释,只有@NotNull或@NotBlank,无论controller层入参方法上采用@Validated还是@Valid验证,Spring Validation框架只会对A实体类上的name、age和这两个属性做非空或数量验证。不会对 teacher字段里的 B实体类中的属性字段进行验证。也就是说,controller层方法入参上加 @Validated 或 @Valid ,实际运行上并不会自动对参数进行嵌套验证。

解决方法:

想要实现嵌套验证参数,必须手动在ItemA的teacher字段上明确指出,A实体中teacher字段里面的属性也要进行验证。

由于@Validated不能用在成员属性(字段)上,但是@Valid能加在成员属性(字段)上,而且@Valid类注解上也说明了它支持嵌套验证功能。

因此:需要在嵌套验证类的相应字段上加上@Valid注解,并配合controller层入参方法参数上,加上@Validated 或 @Valid注解来进行嵌套验证。 这样就解决了。

经验分享 程序员 微信小程序 职场和发展