Hibernate Validator常用注解(图网上找的)
2.自定义校验器
a.注解类
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = PasswordValidator.class)
public @interface Password {
/**
* 默认错误消息
*
* @return
*/
String message() default "密码过于简单";
/**
* 分组
*
* @return
*/
Class>[] groups() default {};
/**
* 负载
*
* @return
*/
Class extends Payload>[] payload() default {};
/**
* 指定多个时使用
*/
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface List {
Password[] value();
}
}
b.验证器
public class PasswordValidator implements ConstraintValidator {
@Override
public void initialize(Password constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return StringUtils.isEmpty(value) || ValidateUtils.validatePassword(value);
}
}c
c.校验工具类
/**
* 校验工具类
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ValidateUtils {
public static final String[] IMG_FILE_TYPE = {".png", ".jpg"};
public static final Pattern ipPattern = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3}");
public static final Pattern usernamePattern = Pattern.compile("(?!_)\\w{6,32}");
public static final Pattern passwordPattern = Pattern.compile("(?![0-9]+$)(?![a-zA-Z]+$)(?!(![0-9A-Za-z])+$)\\S{6,32}");
public static final Pattern mobilePattern = Pattern.compile("1\\d{10}");
public static final Pattern phonePattern = Pattern.compile("^([0,4]{1}[0-9]{2,3}\\-)?([1-9][0-9]{6,7})$");
public static final Pattern codePattern = Pattern.compile("(?!_)\\w{1,64}");
/**
* 校验图片是否符合规则,通过返回true,不通过返回false
* @param fileName 图片名称
* @return 通过返回true,不通过返回false
*/
public static boolean validateImageFile(String fileName) {
for (String string : IMG_FILE_TYPE) {
if (fileName.endsWith(string)) {
return true;
}
}
return false;
}
/**
* 校验图片
* @param fileName 图片名称
* @param inputStream 图片文件流
* @return 通过返回true,不通过返回false
*/
public static boolean validateImageFile(String fileName, InputStream inputStream) {
if (!validateImageFile(fileName)) {
return false;
}
BufferedImage bufReader;
try {
bufReader = ImageIO.read(inputStream);
} catch (IOException e) {
throw new CoreException("Failed to read input stream", e);
}
int width = bufReader.getWidth();
int height = bufReader.getHeight();
return !(width == 0 || height == 0);
}
/**
* 校验IP
*
* @param ip IP地址
* @return 通过返回true,不通过返回false
*/
public static boolean validateIp(String ip) {
return ipPattern.matcher(ip).matches();
}
/**
* 校验用户名
*
* @param username 用户名
* @return 通过返回true,不通过返回false
*/
public static boolean validateUsername(String username) {
return usernamePattern.matcher(username).matches();
}
/**
* 校验密码
*
* @param password 密码
* @return 通过返回true,不通过返回false
*/
public static boolean validatePassword(String password) {
return passwordPattern.matcher(password).matches();
}
/**
* 校验手机号码
*
* @param mobile 手机号码and固话(满足其一)
* @return 通过返回true,不通过返回false
*/
public static boolean validateMobile(String mobile) {
if(!((mobile.length() == 11 && mobilePattern.matcher(mobile).matches())
||(mobile.length() < 16&& phonePattern.matcher(mobile).matches()))){
return false;
}else{
return true;
}
//return mobilePattern.matcher(mobile).matches();
}
/**
* @Description 校验电话号码是否是手机号码
* @Author xj
* @Date 10:08 2018/8/29
* @Param [mobile]
* @return 通过返回true,不通过返回false
**/
public static boolean validatePhone(String mobile) {
if(mobile.length() == 11 && mobilePattern.matcher(mobile).matches()){
return true;
}else{
return false;
}
}
/**
* 校验编号
*
* @param code 编号
* @return 通过返回true,不通过返回false
*/
public static boolean validateCode(String code) {
return codePattern.matcher(code).matches();
}
private static final String ATOM = "[a-z0-9!#$%&'*+/=?^_`{|}~-]";
private static final String DOMAIN = ATOM + "+(\\." + ATOM + "+)*";
private static final String IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]";
private static final int MAX_LOCAL_PART_LENGTH = 64;
private static final int MAX_DOMAIN_PART_LENGTH = 255;
/**
* Regular expression for the local part of an email address (everything before '@')
*/
private static final Pattern localPattern = Pattern.compile(
ATOM + "+(\\." + ATOM + "+)*", CASE_INSENSITIVE
);
/**
* Regular expression for the domain part of an email address (everything after '@')
*/
private static final Pattern domainPattern = Pattern.compile(
DOMAIN + "|" + IP_DOMAIN, CASE_INSENSITIVE
);
private static String toAscii(String unicodeString) throws IllegalArgumentException {
String asciiString = "";
int start = 0;
int end = unicodeString.length() <= 63 ? unicodeString.length() : 63;
while (true) {
asciiString += IDN.toASCII(unicodeString.substring(start, end));
if (end == unicodeString.length()) {
break;
}
start = end;
end = start + 63 > unicodeString.length() ? unicodeString.length() : start + 63;
}
return asciiString;
}
private static boolean matchPart(String part, Pattern pattern, int maxLength) {
String asciiString;
try {
asciiString = toAscii(part);
} catch (IllegalArgumentException e) {
return false;
}
if (asciiString.length() > maxLength) {
return false;
}
Matcher matcher = pattern.matcher(asciiString);
return matcher.matches();
}
/**
* 验证邮箱
*
* @param value 邮箱
* @return 验证结果
*/
public static boolean validateEmail(String value) {
String[] emailParts = value.toString().split("@", 3);
if (emailParts.length != 2) {
return false;
}
if (emailParts[0].endsWith(".") || emailParts[1].endsWith(".")) {
return false;
}
if (!matchPart(emailParts[0], localPattern, MAX_LOCAL_PART_LENGTH)) {
return false;
}
return matchPart(emailParts[1], domainPattern, MAX_DOMAIN_PART_LENGTH);
}
public static final Pattern openIdPattern = Pattern.compile("(?!_)(\\w|-){1,64}");
/**
* 验证open id
*
* @param value open id
* @return 验证结果
*/
public static boolean validateOpenId(String value) {
return openIdPattern.matcher(value).matches();
}
}
d.在需要的实体类上加上@Password就可以验证了