1 注解方式参数校验
@GetMapping("/insert")
@ResponseBody
public User addUser(@Valid User user, BindingResult result) {
if (result.hasErrors()) {
for (ObjectError error : result.getAllErrors()) {
System.err.println(error.getDefaultMessage());
}
}
return user;
}
2 手动触发校验
校验工具类
import java.util.Iterator;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.HibernateValidator;
public class ValidatorUtils {
private static Validator validatorFast = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
private static Validator validatorAll = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
/**
* 校验遇到第一个不合法的字段直接返回不合法字段,后续字段不再校验
* @param <T>
* @param domain
* @return
* @throws Exception
*/
public static <T> Set<ConstraintViolation<T>> validateFast(T domain) throws Exception {
Set<ConstraintViolation<T>> validateResult = validatorFast.validate(domain);
if(validateResult.size()>0) {
throw new CustomException("validateResult.iterator().next().getMessage()", 400);
}
return validateResult;
}
/**
* 校验所有字段并返回不合法字段
* @param <T>
* @param domain
* @return
* @throws Exception
*/
public static <T> Set<ConstraintViolation<T>> validateAll(T domain) throws Exception {
Set<ConstraintViolation<T>> validateResult = validatorAll.validate(domain);
if(validateResult.size()>0) {
Iterator<ConstraintViolation<T>> it = validateResult.iterator();
while(it.hasNext()) {
ConstraintViolation<T> cv = it.next();
System.out.println(cv.getPropertyPath()+":"+cv.getMessage());
}
}
return validateResult;
}
}
业务代码
//校验数据合法性,合法则保存,不合法记录信息
Set<ConstraintViolation<User>> validateResult = ValidatorUtils.validateAll(user);
if(validateResult.size() > 0) {
rstMap.put("userName", userName);
rstMap.put("empId", empId);
rstMap.put("errorMsg", validateResult.iterator().next().getMessage());
rstList.add(rstMap);
continue;
}else {
userRepository.saveAndFlush(user);
}
//校验数据合法性,不合法直接报错
ValidatorUtils.validateAll(user);
实体在字段上方添加注解即可
/**
* 登录账号
*/
@NotEmpty(message="登录账号不能为空")
@Length(min=0,max=50)
@Column(name = "USERNAME", nullable = false, length = 50)
private String userName;