@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) public void defaultErrorHandler(HttpServletRequest req, Exception e, HttpServletResponse response) throws Exception { OutputStream outputStream = response.getOutputStream(); outputStream.write("全局异常".getBytes("UTF-8")); outputStream.flush(); outputStream.close(); } }
直接上代码,@ControllerAdvice 控制器通知,@ExceptionHandler 异常处理器。这两个注解加在一起就很明显了:如果我的控制器有异常将通知这个处理类的异常方法处理器。
这里通过响应流返回数据,当然也可以采取别的处理方式,例如:返回错误页面;
这里处理的是Exception级别的异常,所以如果想返回自定义异常,你需要在代码中自己捕获:
/** * 删除用户 * @param id * @return */ @RequestMapping(value = "{id}", method = RequestMethod.DELETE) public String deleteUser(@PathVariable Long id){ System.out.println("删除用户"); try { throw new CustomException("自定义异常"); } catch (CustomException e) { return e.getMessage(); } }