1. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 创建校验工具类
public class ValidationUtils {
private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
public static void validate(Object object, Class<?> group){
Set<ConstraintViolation<Object>> validateResult = validator.validate(object, group);
if(!validateResult.isEmpty()){
throw new ConstraintViolationException(validateResult);
}
}
}
3. 编写全局异常类
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 校验异常
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R exceptionHandler(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = "";
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMsg += fieldError.getDefaultMessage() + "!";
}
return R.fail(errorMsg);
}
/**
* 校验异常
*/
@ExceptionHandler(value = BindException.class)
public R validationExceptionHandler(BindException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = "";
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMsg += fieldError.getDefaultMessage() + "!";
}
return R.fail(errorMsg);
}
/**
* 校验异常
*/
@ExceptionHandler(value = ConstraintViolationException.class)
public R ConstraintViolationExceptionHandler(ConstraintViolationException ex) {
Set<ConstraintViolation<?>> constraintViolations = ex.getConstraintViolations();
Iterator<ConstraintViolation<?>> iterator = constraintViolations.iterator();
List<String> msgList = new ArrayList<>();
while (iterator.hasNext()) {
ConstraintViolation<?> cvl = iterator.next();
msgList.add(cvl.getMessageTemplate());
}
return R.fail(String.join(",", msgList));
}
/**
* 请求方式不支持
*/
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
public R handleException(HttpRequestMethodNotSupportedException e) {
log.error(e.getMessage(), e);
return R.fail("不支持' " + e.getMethod() + "'请求");
}
/**
* 拦截未知的运行时异常
*/
@ExceptionHandler(RuntimeException.class)
public R notFound(RuntimeException e) {
log.error("服务器错误,系统运行异常:", e);
return R.fail("服务器错误,系统运行异常!");
}
/**
* 系统异常
*/
@ExceptionHandler(Exception.class)
public R handleException(Exception e) {
log.error(e.getMessage(), e);
return R.fail("服务器错误,请联系管理员!");
}
}
4. 测试
@Data
public class Person {
@NotBlank(message = "身份证号不能为空")
private String name;
@NotBlank(message = "电话不能为空")
private String phone;
}
public R test(Person person) {
//分组没有的话,默认为Default.class
ValidationUtils.validate(person, Default.class);
return null;
}