@NotBlank、@NotNull验空注解无效问题

  1. 我们在dto实体需要验证的属性前加上@NotBlank@NotNull@NotEmpty注解,如下:
@Data
public class CompanyDTO {
    @NotBlank(message = "公司名称不能为空")
    private String companyName;
    @NotBlank
    private String oCode;//统一社会信用代码
    @NotBlank
    private String postCode;
    @NotBlank
    private String contacts;//企业联系人
    @Pattern(regexp = MobileUtil.PHONE_REGEX)
    private String telephone;//企业联系人手机号
    @NotBlank
    private String email;//企业邮箱
    private String fax;//传真
}

这三个注解区别如下:

@NotBlank:只用在String上,表示传进来的值不能为null,而且调用trim()后,长度必须大于0
@NotNull:不能为null,但可以为empty(分配了内存空间,但值为空)
@NotEmpty:不能为null,而且长度必须大于0

  1. 如果需要dto中的注解生效有下列做法:
    2.1、在service层接口入口处添加@Validated注解,此时运行项目,给添加了@NotBlank注解的字段传空值,发现没有对参数做任何验证;
    2.2、我们还需要在接口方法的参数前加上@Valid注解,如下图所示:
    在这里插入图片描述
    加上@Valid注解之后再次运行,传递空值,会对参数进行验证从而报错。
    2.3、上述方法也可以加在Controller进行验证,@Validated注解加在Controller层入口处,@Valid注解加在方法参数上,同样能起效果,如下:
    在这里插入图片描述
  2. 如果传递的对象还包含其他对象,要对所包含的对象进行验证,上面的步骤是做不到的,嵌套验证需要在dto对象包含的对象也加上@Valid注解,如下图:
    在这里插入图片描述
    备注:需要了解参数验证 @Validated 和 @Valid 的区别可以参考此文@Validated 和 @Valid 的区别

版权声明:本文为qq_40600507原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。