}
3、全局异常处理类中处理 @Valid 抛出的异常
最后,我们写一个全局异常处理类,然后对接口中抛出的异常进行处理,而 @Valid 配合 Spring 会抛出 MethodArgumentNotValidException 异常,这里我们需要对该异常进行处理即可。
@RestControllerAdvice(“club.mydlq.valid”) //指定异常处理的包名
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST) //设置状态码为 400
@ExceptionHandler({MethodArgumentNotValidException.class})
public String paramExceptionHandler(MethodArgumentNotValidException e) {
BindingResult exceptions = e.getBindingResult();
// 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
if (exceptions.hasErrors()) {
List errors = exceptions.getAllErrors();
if (!errors.isEmpty()) {
// 这里列出了全部错误参数,按正常逻辑,只需要第一条错误即可
FieldError fieldError = (FieldError) errors.get(0);
return fieldError.getDefaultMessage();
}
}
return “请求参数错误”;
}
}
五、SpringBoot 中使用 @Valid 示例
1、Maven 引入相关依赖
Maven 引入 SpringBoot 相关依赖,这里引入了 Lombok 包来简化开发过程。
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
com.aspire
springboot-valid-demo
0.0.1-SNAPSHOT
springboot-valid-demo
@valid demo
<java.version>1.8</java.version>
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-maven-plugin
2、自定义个异常类
自定义个异常类,方便我们处理 GET 请求(GET 请求参数中一般是没有实体对象的,所以不能使用 @Valid),当请求验证失败时,手动抛出自定义异常,交由全局异常处理。
public class ParamaErrorException extends RuntimeException {
public ParamaErrorException() {
}
public ParamaErrorException(String message) {
super(message);
}
}
3、自定义响应枚举类
定义一个返回信息的枚举类,方便我们快速响应信息,不必每次都写返回消息和响应码。
public enum ResultEnum {
SUCCESS(1000, “请求成功”),
PARAMETER_ERROR(1001, “请求参数有误!”),
UNKNOWN_ERROR(9999, “未知的错误!”);
private Integer code;
private String message;
ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
pub