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