Spring 异常处理
Spring 中的异常处理可以有如下几种处理方式:
1、简单的可以通过抛出特定异常,Spring 会自动转换为对应的 HTTP 状态码,或者自定义异常,添加对应状态码注解,如
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Spittle Not Found") public class SpittleNotFoundException extends RuntimeException { }
2、在同一个文件中编写异常处理器,单独写一个方法,添加 @ExceptionHandler(XXXException.class) 注解,如:
@ExceptionHandler(DuplicateSpittleException.class) public String handlerDuplicateSpittle() { return "error/duplicate"; }
3、单独编写一个统一异常处理类,如
@ControllerAdvice public class AppWideExceptionHandler { @ExceptionHandler(DuplicateSpittleException.class) public String duplicateSpittleHandler() { return "error/duplicate"; } }
4、对于 Rest 等方式中的异常,可以在异常处理方法上面添加 @ResponseStatus、@ResponseBody 注解,如:
@ExceptionHandler(DuplicateSpittleException.class) @ResponseStatus(HttpStatus.NOT_FOUND) @ResponseBody public String error(DuplicateSpittleException e) { return e.getMessage(); }
5、更复杂的情况可以通过返回 ResponseEntity<T> 解决
平时开发中,我们可以不通过标志位来判断执行结果,而是通过抛出异常,之后在 Controller 层统一捕获处理。