统一异常处理
# 为什么需要统一异常处理
前面使用了统一响应处理我们日常接口的返回内容,但是有一些内容,或者说有时候代码错误,异常等信息不应该直观的让用户知道,这样很不安全。
使用统一异常处理的好处:
- 不直接展示错误,对用户友好
- 异常分类,便于排查问题,DEBUG
- 降低业务代码中的对异常处理的耦合
- 前后端分离的场景,很多返回的错误码会比较杂乱无章,我们需要返回友好的错误信息
# 自定义异常
通常异常会定义在一个
exception
包里。
/**
* 优惠券项目,通用异常定义
*/
public class CouponException extends Exception {
public CouponException(String message) {
super(message);
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
进一步增强异常处理
import com.wxvirus.coupon.exception.CouponException;
import com.wxvirus.coupon.vo.CommonResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
/**
* 全局异常处理
*/
@RestControllerAdvice
public class GlobalExceptionAdvice {
/**
* 对 CouponException 异常进行统一处理
*
* @param req
* @param ex
* @return
*/
@ExceptionHandler(value = CouponException.class)
public CommonResponse<String> handlerCouponException(
HttpServletRequest req, CouponException ex
) {
// 响应处理
CommonResponse<String> response = new CommonResponse<>(-1, "business error");
response.setData(ex.getMessage());
return response;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
RestControllerAdvice: 组合注解, ControllerAdvice + ResponseBody, 是对 RestController 的功能增强
编辑 (opens new window)
上次更新: 2022/01/13, 23:04:18