Spring MVC異常處理有三種方案:
1.使用@ExceptionHandler注解活鹰。
public class AccountController {
? ? ? @ExceptionHandler
? ? ? public void handleException() {}
}
@ExceptionHandler是Controller級(jí)別的,不是整個(gè)應(yīng)用程序全局有效级野。給每個(gè)controller添加對(duì)應(yīng)的@ExceptionHandler方法會(huì)很繁瑣繁莹¢莼ィ可以讓所有Controller類繼承BaseController類,在BaseController類里面添加@ExceptionHandler修飾的方法進(jìn)行異常處理咨演。
2. 使用HandlerExceptionResolver可以實(shí)現(xiàn)一個(gè)統(tǒng)一的異常處理機(jī)制闸昨。Spring提供了以下HandlerExceptionResolver可以使用:
ExceptionHandlerExceptionResolver是@ExceptionHandler機(jī)制工作的核心組件。
DefaultHandlerExceptionResolver用于將標(biāo)準(zhǔn)的Spring異常解析為相應(yīng)的http狀態(tài)碼。
ResponseStatusExceptionResolver主要用于把修飾自定義異常的@ResponseStatus注解映射對(duì)應(yīng)異常到相應(yīng)的http狀態(tài)碼饵较。
SimpleMappingExceptionResolver和AnnotationMethodHandlerExceptionResolver
自定義 HandlerExceptionResolver可以返回一個(gè)ModelAndView對(duì)象拍嵌,可以設(shè)置需要的任何內(nèi)容。
3. 新的@ControllerAdvice提供了一個(gè)全局的@ExceptionHandler 異常處理機(jī)制循诉。
@ControllerAdvice
public class ExceptionHandler {
? ? ? ? ? ? ? ? ? ? ? ? @ExceptionHandler(Exception.class)
public Result handleException(Exception e)? {
? ? // todo
? }
}
@ControllerAdvice允許把分散在多個(gè)Controller的@ExceptionHandler合并到單個(gè)全局錯(cuò)誤處理組件中横辆。