学习内容:
统一异常处理
1、 使用SpringMVC中的@ControllerAdvice
2、 掌握 Java 基本语法
3、 掌握条件语句
4、 掌握循环语句
文章目录
前言
上一篇文章中使用了Bean Validation做后端的数据校验,数据校验失败后,在每个Controller方法中都主动使用BindingResult去接收了这个数据校验失败后所产生的异常。其实我们可以不用主动接收这个异常,放着不管这个异常就会被自动抛出,然后可以使用SpringMVC中提供的@ControllerAdvice
去接收这个异常,随后将其发送给前端。
1.编写一个类,在类的前面加上@RestControllerAdvice注解
@RestControllerAdvice(basePackages = "com.linqibin.mall.product.controller")
public class MallExceptionControllerAdvice {
2.搭配@ExceptionHandler注解
package com.linqibin.mall.product.exception;
import com.linqibin.common.exception.BizCodeEnum;
import com.linqibin.common.utils.R;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
@RestControllerAdvice(basePackages = "com.linqibin.mall.product.controller")
public class MallExceptionControllerAdvice {
/**
* 后端数据校验
* @author hugh&you
* @since 2021/1/21 23:07
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public R handleValidException(MethodArgumentNotValidException exception) {
BindingResult result = exception.getBindingResult();
Map<String, String> map = new HashMap<>();
result.getFieldErrors().forEach((item) -> {
String field = item.getField();
String msg = item.getDefaultMessage();
map.put(field, msg);
});
return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(), BizCodeEnum.VALID_EXCEPTION.getMsg())
.put("data", map);
}
@ExceptionHandler(Throwable.class)
public R handleException(Throwable throwable) {
return R.error(BizCodeEnum.UNKNOWN_EXCEPTION.getCode(),
BizCodeEnum.UNKNOWN_EXCEPTION.getMsg());
}
}
3.前端错误代码与信息一般都会使用枚举类型。具体代码如下。
package com.linqibin.common.exception;
public enum BizCodeEnum {
UNKNOWN_EXCEPTION(10000, "未知异常"),
VALID_EXCEPTION(10001, "参数校验失败");
private int code;
private String msg;
BizCodeEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
总结:
视频讲解的很详细,感兴趣的可以看一下。统一异常处理p67