UserDto:
package com.imooc.uaa.domain.dto;
import com.imooc.uaa.validation.annotation.PasswordMatches;
import com.imooc.uaa.validation.annotation.ValidEmail;
import com.imooc.uaa.validation.annotation.ValidPassword;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@PasswordMatches
@Data
public class UserDto implements Serializable {
@NotNull
@NotBlank
@Size(min = 4, max = 50, message = "用户名长度必须在4到50个字符之间")
private String username;
@NotNull
@ValidPassword
private String password;
@NotNull
private String matchingPassword;
@NotNull
@ValidEmail
private String email;
@NotNull
@NotBlank
@Size(min = 4, max = 50, message = "姓名长度必须在4到50个字符之间")
private String name;
}
添加邮箱的验证注解ValidEmail
package com.imooc.uaa.validation.annotation;
import com.imooc.uaa.validation.EmailValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({ TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = EmailValidator.class)
@Documented
public @interface ValidEmail {
String message() default "{ValidEmail.email}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
EmailValidator:
package com.imooc.uaa.validation;
import com.imooc.uaa.validation.annotation.ValidEmail;
import lombok.val;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;
public class EmailValidator implements ConstraintValidator<ValidEmail, String> {
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
@Override
public void initialize(final ValidEmail constraintAnnotation) {}
@Override
public boolean isValid(final String username, final ConstraintValidatorContext context) {
return (validateEmail(username));
}
private boolean validateEmail(final String email) {
val pattern = Pattern.compile(EMAIL_PATTERN);
val matcher = pattern.matcher(email);
return matcher.matches();
}
}
密码两次校验是否相同:
PasswordMatches:
package com.imooc.uaa.validation.annotation;
import com.imooc.uaa.validation.PasswordMatchesValidator;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordMatchesValidator.class)
@Documented
public @interface PasswordMatches {
String message() default "{PasswordMatches.userDto}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
添加注解对应的实现:
package com.imooc.uaa.validation;
import com.imooc.uaa.domain.dto.UserDto;
import com.imooc.uaa.validation.annotation.PasswordMatches;
import lombok.val;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PasswordMatchesValidator implements ConstraintValidator<PasswordMatches, UserDto> {
@Override
public void initialize(final PasswordMatches constraintAnnotation) { }
@Override
public boolean isValid(final UserDto obj, final ConstraintValidatorContext context) {
val user = (UserDto) obj;
return user.getPassword().equals(user.getMatchingPassword());
}
}
使用的依赖:
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.6.0</version>
</dependency>