提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
)
前言
学习保存代码用
自定义异常处理,在Controller中自定义发生的异常。
一、使用的注解
@ControllerAdvice
@ExceptionHandler
@ResponseBody
二、使用步骤
1.自定义基础异常类
/**
* 自定义基础异常
*/publicclassBaseExceptionextendsRuntimeException{privatestaticfinallong serialVersionUID=1L;/**
* 所属模块
*/privateStringmodule;/**
* 错误码
*/privateString code;/**
* 错误码对应的参数
*/privateObject[] args;/**
* 错误消息
*/privateString defaultMessage;publicBaseException(Stringmodule,String code,Object[] args,String defaultMessage){this.module=module;this.code= code;this.args= args;this.defaultMessage= defaultMessage;}publicBaseException(Stringmodule,String code,Object[] args){this(module, code, args,null);}publicBaseException(Stringmodule,String defaultMessage){this(module,null,null, defaultMessage);}publicBaseException(String code,Object[] args){this(null, code, args,null);}publicBaseException(String defaultMessage){this(null,null,null, defaultMessage);}@OverridepublicStringgetMessage(){String message=null;if(!StringUtil.isEmpty(code)){
message= code;}if(message==null){
message= defaultMessage;}return message;}publicStringgetModule(){returnmodule;}publicStringgetCode(){return code;}publicObject[]getArgs(){return args;}publicStringgetDefaultMessage(){return defaultMessage;}}
各个模块继承基础异常模块(举例)
/**
* 用户信息异常类
*/publicclassUserExceptionextendsBaseException{privatestaticfinallong serialVersionUID=1L;publicUserException(String code,Object[] args){super("user", code, args,null);}}
构建全局异常处理器
@ControllerAdvicepublicclassGlobalExceptionController{/**
* 全局异常捕捉处理
* @param e
* @return
*/@ResponseBody@ExceptionHandler(value=Exception.class)publicMaperrorHandler(Exception e){System.out.println("用户异常调用测!");Map map=newHashMap();
map.put("code",100);
map.put("msg", e.getMessage());return map;}/**
* 拦截捕捉自定义异常 用户删除异常
* @param ex
* @return
*/@ResponseBody@ExceptionHandler(value=UserDeleteException.class)publicAjaxResultUserDeleteException(UserDeleteException ex){returnAjaxResult.error(ex.getMessage());}/**
* 拦截捕捉自定义异常 用户锁定异常
* @param ex
* @return
*/@ResponseBody@ExceptionHandler(value=UserBlockedException.class)publicAjaxResultUserBlockedException(UserBlockedException ex){System.out.println("用户锁定异常调用!");returnAjaxResult.error(ex.getMessage());}}
总结
错误类型的参数必须和@ExceptionHandler里的参数保持一致,否则会找不到解析器。返回图的话去掉@ResponseBody,返回类型设为ModelAndView