SpringMVC全域性異常統一處理
阿新 • • 發佈:2019-02-04
(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver:
(2)實現Spring的異常處理介面HandlerExceptionResolver 自定義自己的異常處理器;<!-- springmvc提供的簡單異常處理器 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!--定義預設的異常處理頁面,當該異常型別的註冊時使用--> <property name="defaultErrorView" value="error"></property> <!--定義異常處理頁面用來獲取異常資訊的變數名,預設名為exception--> <property name="exceptionAttribute" value="ex"></property> <!-- 定義需要特殊處理的異常,這是重要點 --> <property name="exceptionMappings"> <props> <!--key為異常類名,unauthorized為跳轉頁面--> <prop key="org.apache.shiro.authz.AuthorizationException">unauthorized</prop> <!-- 這裡還可以繼續擴充套件對不同異常型別的處理 --> </props> </property> </bean>
(3)使用@ExceptionHandler註解實現異常處理。
@ControllerAdvice public class BaseException { @ExceptionHandler(ArithmeticException.class) @ResponseStatus(HttpStatus.OK) @ResponseBody public Map<String, Object> handleBusException(Exception e) { Map<String, Object> map = new HashMap(); if (e instanceof MyException){ map.put("resCode","500"); map.put("message","myException"); } if (e instanceof ArithmeticException){ map.put("resCode","500"); map.put("message","ArithmeticException"); } return map; }
@ControllerAdvice 全域性的,該註解使@ExceptionHandler可以監控全域性的異常
@ResponseStatus 指定返回狀態碼