Spring 全局异常处理

zjun Lv4

SpringBoot中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。

全局异常处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@ControllerAdvice
public class MyExceptionHandler {

@ApiOperation("处理空指针的异常")
@ExceptionHandler(value =NullPointerException.class)
@ResponseBody
public ResultBody npeHandler(Exception e) {
logger.error("发生空指针异常!原因是:",e);
return Result.fail(null).message("执行了全局处理异常");
return ResultBody.error(CommonEnum.BODY_NOT_MATCH);
}

    @ApiOperation("处理其他异常")
    @ExceptionHandler(value =Exception.class)
@ResponseBody
public ResultBody exceptionHandler(HttpServletRequest req, Exception e){
logger.error("未知异常!原因是:",e);
return ResultBody.error(CommonEnum.INTERNAL_SERVER_ERROR);
}

}

统一返回枚举类

1
2
3
4
5
6
public interface BaseErrorInfoInterface{

    public String getResultCode()
    public String getResultMsg()

}
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
public enum CommonEnum implements BaseErrorInfoInterface{
// 数据操作错误定义
SUCCESS("200", "成功!"),
BODY_NOT_MATCH("400","请求的数据格式不符!"),
SIGNATURE_NOT_MATCH("401","请求的数字签名不匹配!"),
NOT_FOUND("404", "未找到该资源!"),
INTERNAL_SERVER_ERROR("500", "服务器内部错误!"),
SERVER_BUSY("503","服务器正忙,请稍后再试!")
;

/** 错误码 */
private String resultCode;

/** 错误描述 */
private String resultMsg;

CommonEnum(String resultCode, String resultMsg) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
}

public String getResultCode() {
return resultCode;
}

public String getResultMsg() {
return resultMsg;
}

}

统计返回结果类

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@ApiModel(value = "全局统一返回结果")
public class ResponseBean<T>{

@ApiModelProperty(value = "返回码")
private String code;

@ApiModelProperty(value = "返回消息")
private String message;

@ApiModelProperty(value = "返回数据")
private T data;

public ResponseBean() {
}

public ResponseBean(BaseErrorInfoInterface errorInfo) {
this.code = errorInfo.getResultCode();
this.message = errorInfo.getResultMsg();
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data= data;
}

/**
* 成功
*
* @return
*/
public static ResponseBean success() {
return success(null);
}

/**
* 成功
* @param data
* @return
*/
public static ResponseBean success(T data) {
ResponseBean rb = new ResponseBean();
rb.setCode(CommonEnum.SUCCESS.getResultCode());
rb.setMessage(CommonEnum.SUCCESS.getResultMsg());
rb.setData(data);
return rb;
}

/**
* 失败
*/
public static ResponseBean error(BaseErrorInfoInterface errorInfo) {
ResponseBean rb = new ResponseBean();
rb.setCode(errorInfo.getResultCode());
rb.setMessage(errorInfo.getResultMsg());
rb.setData(null);
return rb;
}

/**
* 失败
*/
public static ResponseBean error(String code, String message) {
ResponseBean rb = new ResponseBean();
rb.setCode(code);
rb.setMessage(message);
rb.setData(null);
return rb;
}

/**
* 失败
*/
public static ResponseBean error( String message) {
ResponseBean rb = new ResponseBean();
rb.setCode("-1");
rb.setMessage(message);
rb.setData(null);
return rb;
}

@Override
public String toString() {
return JSONObject.toJSONString(this);
}

}
  • 标题: Spring 全局异常处理
  • 作者: zjun
  • 创建于 : 2019-08-10 22:50:51
  • 更新于 : 2023-11-30 21:14:42
  • 链接: https://zjun.site/2019/08/b3d504d77f20.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
Spring 全局异常处理