需求:判断用户实体上面的password是否为空,如果不为空,数据库是否存在,如果存在则不让用户提交数据
1,创建自定义注解类
import com.tuogo.sephora.rb.system.validate.impl.OldPasswordConstraintValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {OldPasswordConstraintValidator.class})
public @interface SecUserOldPasswordValidity {
String message() default "{com.mycompany.constraints.checkcase}";
String value() default "";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
2,创建注解验证类
/** 判断旧密码是否正确 实时验证
* @author zgx
*/
public class OldPasswordConstraintValidator implements ConstraintValidator {
private String validOldPassword;
public OldPasswordConstraintValidator() {
}
/**
* 可以在验证开始前调用注解里的方法,从而获取到一些注解里的参数
*
* @param secUserOldPasswordValidity
*/
@Override
public void initialize(SecUserOldPasswordValidity secUserOldPasswordValidity) {
this.validOldPassword = secUserOldPasswordValidity.value();
}
/**
* 真正的校验逻辑
*
* @param oldPwd
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String oldPwd, ConstraintValidatorContext constraintValidatorContext) {
// 当前前端传过来的请求参数是空串,或者没传的时候,不进行后续正则校验
if ("".equals(oldPwd) || oldPwd == null) {
return true;
} else {
boolean pwdIfValidity = SpringContextUtils.getBean(SecUserPwdAndEmailIsValidity.class).isSecUserPwdIfValidity(oldPwd);
return pwdIfValidity;
}
}
}
这里使用 isSecUserPwdIfValidity()方法判断当前输入的旧密码与新密码是否正确
第三步,实体上使用注解
国际化信息为
profile.secuser.old.empty=Old Password is required
oldPwd.msg.error=The old password is different from the original one
最后进行效验:
如果什么都不输入,点击保存
如果输入的密码与数据库不匹配,点击save则
下面是hibernate_validator参考手册(英文版)
链接:https://pan.baidu.com/s/1fAviG076Iw28nW7k-iuhmA 提取码:kovy