1、导入对应的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2、自定义逻辑校验类,需要实现ConstraintValidator<ValidateEmail,String>
ValidateEmail 是自定义的注解,String 是校验的属性类型。
package com.yj.miaosha_system.validation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 自定义校验注解
*/
public class EmailValidation implements ConstraintValidator<ValidateEmail,String> {
private final String EMAIL_PATTERN = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
@Override
public void initialize(ValidateEmail constraintAnnotation) {
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
return isEmail(s);
}
private boolean isEmail(String s){
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(s);
boolean result = matcher.matches();
return result;
}
}
3、自定义校验注解
package com.yj.miaosha_system.validation;
import org.springframework.context.annotation.PropertySource;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@Constraint(
//指定校验的逻辑类
validatedBy = EmailValidation.class
)
@Documented
public @interface ValidateEmail {
String message() default "invalid.email";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
4、在实体上使用
package com.yj.miaosha_system.domain.dto;
import com.yj.miaosha_system.validation.ValidateEmail;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@Data
public class UserDto implements Serializable {
@NotNull
@NotBlank
@Size(min = 4,max = 50,message = "用户名的长度必须在4到50个字符之间")
private String username;
@NotNull
@NotBlank
@Size(min = 8,max = 20,message = "密码的长度必须在8到20个字符之间")
private String password;
@NotNull
@NotBlank
@Size(min = 8,max = 20,message = "密码的长度必须在8到20个字符之间")
private String matchPassword;
// @Email
@NotNull
@ValidateEmail //自定义注解校验
private String email;
@NotNull
@NotBlank
@Size(min = 2,max = 10,message = "姓名的长度必须在2到10个字符之间")
private String name;
}