一.导入maven依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.0.Final</version>
</dependency>
二.给需要校验的pojo加上注解
多层嵌套List校验用@Vaild
@Length(max = 128, message = "MAC值最大长度不能超过128!")
private String MAC_VALUE; //MAC值
@NotBlank(message = "返回状态不能为空!")
@Length(max = 1, message = "返回状态最大长度不能超过1!")
private String RET_STATUS; //返回状态 S-系统处理成功 F-系统处理失败
@Valid
List<Ret> RET_ARRAY; //返回信息列表
public class Ret {
@NotBlank(message = "返回代码不能为空!")
@Length(max = 30, message = "返回代码最大长度不能超过30!")
private String RET_CODE; //返回代码
@NotBlank(message = "返回信息不能为空!")
@Length(max = 512, message = "返回信息最大长度不能超过512!")
private String RET_MSG; //返回信息
}
三、通用Validator校验工具
import org.apache.commons.collections.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* validator校验工具
* @author liuy
* @since 2019年6月20日 19:33:56
*/
public class ValidatorUtil {
private static Validator validator;
static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
/**
* 单个校验
* @param object 待校验对象
*/
public static String dataCheck(Object object){
String result = null;
Set<?> set = validator.validate(object);
if(set != null && set.size() > 0){
Iterator<?> it = set.iterator();
ConstraintViolation<?> cv = (ConstraintViolation<?>) it.next();
String property = cv.getPropertyPath().iterator().next().getName();
result = "[" + property + ":" + cv.getMessage() + "]";
}
return result;
}
/**
* 使用指定分组校验
* @param object 被校验的bean
* @param groups 分组
* @return
*/
public static <T> Map<String, StringBuilder> validate(T object, Class<?>... groups) {
Map<String, StringBuilder> errorMap = new HashMap<>(16);
if (groups == null) {
groups = new Class[]{Default.class};
}
Set<ConstraintViolation<T>> set = validator.validate(object, groups);
if (CollectionUtils.isEmpty(set)) {
return null;
}
String property;
for (ConstraintViolation<T> c : set) {
// 这里循环获取错误信息,可以自定义格式
property = c.getPropertyPath().toString();
if (errorMap.get(property) != null) {
errorMap.get(property).append(",").append(c.getMessage());
} else {
StringBuilder sb = new StringBuilder();
sb.append(c.getMessage());
errorMap.put(property, sb);
}
}
return errorMap;
}
}
四、校验工具的使用
//校验响应SysHead
Map<String, StringBuilder> errorMap1 = ValidatorUtil.validate(esbResponse.getSYS_HEAD());
if(errorMap1 != null && errorMap1.size() >0) {
logger.error("响应报文SysHead校验出错!");
for (Map.Entry<String, StringBuilder> entry : errorMap1.entrySet()) {
logger.error("出错字段: {}, 校验信息: {}", entry.getKey(), entry.getValue());
}
}