SpringValidation的参数校验使用可参考:【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客
目录
1. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.2.0</version>
</dependency>
使用场景:已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)。 实现自定义注解可以通过模仿,SpringValidation提供的其他注解进行改写。
举例说明:
我有一个实体类,其中一个参数state需要接收到前端数据后进行校验(要求该参数只能是 已发布 或者 草稿)。而SpringValidation提供的注解无法满足我的需求,此时便需要自定义注解。
注意:该类需要实现 ConstraintValidator接口,并实现 isValid( )方法。方法内即是校验规则, 我这里只是提供参考。请自行根据业务需求更改。
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
/**
* ConstraintValidator<State, String>前一个代表需要校验的注解,后一个代表校验类型
*/
public class Validation implements ConstraintValidator<State, String> {
/**
*
* @param value 将来要校验的数据
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
//校验规则
if (value == null) {
return false;
}
if (value.equals("已发布") || value.equals("草稿")) {
return true;
}
return false;
}
}
注解名称,请根据自己业务需求更改。
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented //元注解,代表可在文档显示
@Constraint(
validatedBy = {Validation.class} //指定提供校验规则的类,该类需要自己指定
)
//元注解,代表注解适用的对象(方法、字段、注解、类、属性)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME) //元注解,代表注解的作用范围
public @interface State {
//报错提示
String message() default "state参数只能是已发布或者草稿";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
分组校验的 流程:1.定义分组?2.定义校验项时指定归属的分组3.校验时指定要校验的分组
注意: 如果在方法上对参数进行校验,需要在类上添加@Validated注解。如果在实体类中对成员遍历进行校验,需要在使用到这个类的接口方法中添加@Validated注解。