springboot异常处理的几种方法

springboot中异常处理的几种方式:

1).使用默认springBoot中默认的异常处理:BasicErrorController.class

2).自定义异常处理类

3).使用@ExceptionHandler注解做全局异常处理

1.自带的异常处理分为2类一种是返回页面,一种是返回json格式如下

我们可以使用自定义的异常处理类和错误配置页面来覆盖的默认的错误提示页面如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

public class WxException extends Exception {
private static final long serialVersionUID = 1L;
private String message;
private String errCode;

public WxException(String message) {
super(message);
}

public WxException(String errCode, String message) {
super(message);
this.errCode = errCode;
this.message = message;
}
}

配置页面则在相应的配置在资源地址下如:

webapp/WEB-INF/error/xxx.jsp (注xxx应该为明确的状态协议码)

这样就完成了对默认错误页面的覆盖

2.使用@ExceptionHandler注解做全局异常处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

首先自定义一个异常处理类:WxException.class;

然后定义一个全局异常类如下:

public class BaseController {
@ExceptionHandler(WxException.class)
@ResponseBody
public Rs handleValidationException(WxException e) {
return Rs.ofFail("-10000", e.getMessage());
}
}

其中@ExceptionHandler中的value值可以自行定义可以是自定义的异常类也可以是针对单独某一个类。

然后返回自己想要的格式就行。

3.若只返回json数据我们也可以继承BasicErrorContorller类,重写error方法编写自己想要的数据如下:

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

@Controller
public class GlobalErrorController extends BasicErrorController {

public GlobalErrorController() {
super(new DefaultErrorAttributes(), new ErrorProperties());
}

@Override
@RequestMapping
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
// HttpStatus status = this.getStatus(request);
String errcode = String.valueOf(body.get("status") != null ? body.get("status") : "500");
// String errmsg = (String) body.get("error");
String path = (String) body.get("path");
String message = (String) body.get("message");
Map<String, Object> map = new HashMap<>(8);
map.put("errCode", errcode);
map.put("path", path);
map.put("message", message);
map.put("success", "false");
return new ResponseEntity<>(map, HttpStatus.OK);
}
}