在Spring若在请求期间发生错误,则调度器
DispatcherServlet
将委托HandlerExceptionResolver
类来处理异常;而在SpringBoot中默认提供了/error映射,来解决异常,其的实现类为ErrorController
,其将错误信息写入页面或者以json格式返回给前端展示。
1.定制异常处理器
-
在SpringBoot中定义全局的异常处理类,它将捕获
MyException
异常,并返回自定义信息@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MyException.class) @ResponseBody ResponseEntity<?> handleControllerException(HttpServletRequest request, MyException ex) { Map<String,Object> rMap = new HashMap<>(); rMap.put("status",100); rMap.put("message",ex.getMessage()); return new ResponseEntity<>(rMap, HttpStatus.INTERNAL_SERVER_ERROR); } }
-
自定义异常类
public class MyException extends Exception { public MyException(String message) { super(message); } }
-
Controller类中
@RestController public class ExceptionController { @GetMapping public void testExceptionMap() throws MyException { throw new MyException("抛出自定义错误"); } }
2.详解
- 可用
@RestControllerAdvice
注解替换@ControllerAdvice
和@ResponseBody
@ControllerAdvice
注解有basePackages和basePackageClasses属性,分别表示捕获指定包下或者指定类下的异常信息。@ExceptionHandler
标注方法参数支持范围javax.servlet.ServletRequest
,javax.servlet.ServletResponse
,@RequestAttribute
等,具体可见官方陈列
3.总结
- 在SpringBoot中处理异常十分简便,①使用@ControllerAdvice定义异常处理类,并指定异常处理范围;②使用@ExceptionHandler注解指定处理异常类;
- 此文章的github范例,点击获取
- 参考: