首先引入包的管理
javax.el
javax.el-api
2.2.4
javax.validation
validation-api
1.1.0.Final
org.hibernate
hibernate-validator
5.2.2.Final
实现校验类并使用 package com.sk.browser.utils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;
/**
* 数据验证工具类
* @author 高国藩
* @date 2017年4月25日 上午10:32:24
*/
public class ValidatorUtil {
private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public static Map validate(T obj) {
Map errorMap = null;
Set> set = validator.validate(obj, Default.class);
if (set != null && set.size() > 0) {
errorMap = new HashMap();
String property = null;
for (ConstraintViolation cv : set) {
property = cv.getPropertyPath().toString();
if (errorMap.get(property) != null) {
errorMap.get(property).append("," + cv.getMessage());
} else {
StringBuffer sb = new StringBuffer();
sb.append(cv.getMessage());
errorMap.put(property, sb);
}
}
}
return errorMap;
}
}
自定义校验类 package com.sk.system.validator;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
* 定义valid管理器
* @author 高国藩
* @date 2017年4月25日 上午11:16:37
*/
public class CustomValidation {
/**
* 定义金额校验
* @author 高国藩
* @date 2017年4月25日 上午11:06:01
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MoneyValidator.class)
public @interface Money {
String message() default "金额格式不正确";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
} package com.sk.system.validator;
import java.util.regex.Pattern;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.sk.system.validator.CustomValidation.Money;
public class MoneyValidator implements ConstraintValidator {
private String moneyReg = "^\\d+(\\.\\d{1,2})?$";//表示金额的正则表达式
private Pattern moneyPattern = Pattern.compile(moneyReg);
@Override
public void initialize(Money arg0) {
}
@Override
public boolean isValid(Double arg0, ConstraintValidatorContext arg1) {
if (arg0 == null)
//金额是空的,返回true,是因为如果null,则会有@NotNull进行提示
//如果这里false的话,那金额是null,@Money中的message也会进行提示
//自己可以尝试
return true;
return moneyPattern.matcher(arg0.toString()).matches();
}
}
校验注解汇总