环境java21
引入mavern
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
/**
* @author ancen
* StartWithValidator定义的类,传给
*/
@Constraint(validatedBy = {StartWithValidator.class})
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface StartWithValidation {
//错误提示信息
String message() default "不是正确的格式";
//效验的字符
String startWith() default "^";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
/**
* @author ancen
*定义的接口传来的参数StartWithValidation
*/
public class StartWithValidator implements ConstraintValidator<StartWithValidation,String> {
private String startWithValues;
/**
*
* @param constraintAnnotation
* constraintAnnotation 设定需要验证的参数,比如:需要以 ancen 开头的字符
*/
@Override
public void initialize(StartWithValidation constraintAnnotation) {
startWithValues=constraintAnnotation.startWith();
}
/**
*
* @param paramValue 定义的是前端穿过来的参数值
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String paramValue, ConstraintValidatorContext constraintValidatorContext) {
if (!StringUtils.isEmpty(paramValue)){
return startWithValues.contains(paramValue);
}
return false;
}
}
需要验证的对象
/**
* @author ancen
*/
@Data
public class UserDTO {
@StartWithValidation(message = "请输入正确格式",startWith = "ancen")
private String name;
private Integer age;
private String email;
}
2、只能取枚举的值,相关代码
/**
* @author ancen
*/
@Constraint(validatedBy = {StartWithValidator.class})
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface ListValue {
String message() default "该值不在有效范围内!";
String[] value();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
/**
* @author ancen
*/
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,String> {
/**
* 存取定义的值
*/
private Set<String> setValues= new HashSet<>();
@Override
public void initialize(ListValue constraintAnnotation) {
for (String val : constraintAnnotation.value()) {
setValues.add(val);
}
}
/**
*
* @param value 需要验证前端传过来的值
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
return setValues.contains(value);