👻 参数校验注解不生效解决方案


在日常开发过程中,我们会写一些注解⽤于加在 java 的实体类属性字段上,或者放到 controller 层的方法参数中,在进⾏请求或请求的时候会根据字段的注解进⾏对应的校验,简化校验相关的代码。 当校验不通过时,会返回对应的 message 描述

例 1:注解写在 Controller 层的接口参数中

image-20230918153112631

例 2:注解写在实体中

image-20230918153141913

当这些注解不生效时,解决方案如下:

1、当@NotNull 等注解写在实体类中时,需要在 Controller 接口的方法参数加入@Valid 注解,如下图所示:

image-20230918153232517

2、当@NotNull 等注解写在 Controller 层的接口参数中时,需要在该方法的 Controller 类上添加@Validated,如下图所示:

image-20230918153315604

补充:除@NotNull 之外的其他校验相关的注解

//被注释的元素必须为null
@Null
//被注释的元素不能为null
@NotNull
//被注释的元素必须为true
@AssertTrue
//被注释的元素必须为false
@AssertFalse
//被注释的元素必须是⼀个数字,其值必须⼤于等于指定的最⼩值
@Min(value)
//被注释的元素必须是⼀个数字,其值必须⼩于等于指定的最⼤值
@Max(value)
//被注释的元素必须是⼀个数字,其值必须⼤于等于指定的最⼩值
@DecimalMin(value)
//被注释的元素必须是⼀个数字,其值必须⼩于等于指定的最⼤值
@DecimalMax(value)
//被注释的元素的⼤⼩必须在指定的范围内。
@Size(max,min)
//被注释的元素必须是⼀个数字,其值必须在可接受的范围内
@Digits(integer,fraction)
//被注释的元素必须是⼀个过去的⽇期
@Past
//被注释的元素必须是⼀个将来的⽇期
@Future
//被注释的元素必须符合指定的正则表达式。
@Pattern(value)
//被注释的元素必须是电⼦邮件地址
@Email
//被注释的字符串的⼤⼩必须在指定的范围内
@Length
//被注释的字符串必须⾮空
@NotEmpty
//被注释的元素必须在合适的范围内
@Range