這種方式是處理全局異常,只要有對應的異常拋出,就會使用這個bean進行處理。使用SimpleMappingExceptionResolver
的話,只要在springmvc配置文件中作以下聲明就能夠了。web
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <-- 默認的異常界面,若是不是特殊指定的異常,都顯示這個界面 --> <property name="defaultErrorView" value="/exception/handle/errorGlobal" /> <-- 異常的名稱,界面上能夠使用這個來輸出異常信息 --> <property name="exceptionAttribute" value="e" /> <-- 指定特殊異常,併爲特殊異常指定特定的界面 --> <property name="exceptionMappings"> <props> <prop key="xyz.zeling.exception.handle.modules.exception.handle.UserNotFoundException">/exception/handling/errorUser</prop> </props> </property> </bean>
這個是全局異常,只要有對應的異常拋出,就會使用這個類進行處理。注意使用這種方式的話,須要使這個類成爲bean,能夠使用註解方式,也能夠在spring配置文件中聲明。這個例子使用的是註解的方式。spring
@Component public class GlobalExceptionHandlerAnother implements HandlerExceptionResolver { /** * 異常處理方法,ex就是程序拋出的異常 */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { return new ModelAndView("/exception/handle/errorGlobal"); } }
這個也是全局異常,只要有對應的異常拋出,就會使用@ExceptionHandler
註解的方法進行處理,@ControllerAdvice
註解的類除了有處理異常的@ExceptionHandler
方法外,還有其它兩個註解方法,感興趣的同窗能夠自行研究。mvc
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception e) { System.out.println("打印異常信息:"); e.printStackTrace(); return new ModelAndView("/exception/handling/errorGlobal"); } }
@ResponseStatus
能夠自定義返回狀態碼和提示信息。
使用方式,先自定義一個異常,並使用@ResponseStatus
註解app
@ResponseStatus( value = HttpStatus.BAD_REQUEST, reason = "測試自定義返回碼") public class UserNotFoundException extends Exception { private static final long serialVersionUID = -8695002135215307249L; public UserNotFoundException(String name) { super("User not found with name: " + name); } }
而後在你想拋出這個異常的地方進行拋出ide
if (user == null) { throw new UserNotFoundException(name); }
程序運行到這裏以後,界面上就會返回一個自定義狀態碼和自定義提示信息。
PS:這個處理異常的方式會被@ControllerAdvice
處理方式覆蓋掉,其它的全局處理異常會不會覆蓋沒測試過,若是有測過的同窗麻煩幫忙評論告知。測試
這種方式處理的異常只針對於使用的那個Controller方法,使用方式:code
@Controller @RequestMapping("/exception/handling") public class ExceptionHandleController { @RequestMapping("/main") public ModelAndView toMain() { return new ModelAndView("/exception/handling/main"); } /** * @description TODO * @date 2018年1月29日 下午11:50:58 * @param e 註解使用的異常,能夠看成參數 * @return * @throws Exception */ @ExceptionHandler(UserNotFoundException.class) public ModelAndView handleException(UserNotFoundException e) { // 異常處理邏輯 // ... return new ModelAndView("/exception/handling/errorUser"); } }
有錯誤的地方麻煩評論指正一下哈,共勉。繼承