SpringBoot学习笔记4-业务异常处理

  • 内容
  • 评论
  • 相关

一个普通的web项目通常分为三层,controller(控制转发)、service(业务)、dao(数据链接),每一层都会有抛出异常的时候,如果不用spring或者其他框架的话,异常就得自己进行处理,处理起来也是比较麻烦的。

在springboot中进行统一的异常处理是很简单的,简单的配置就行了

在类上加上@ControllerAdvice注解,这就是一个统一的异常处理器了

可以在其中写上处理异常的方法,我写了两个方法,一个使用来处理Exception异常的,一个是用来处理自定义的业务异常,通过  @ExceptionHandler注解来指定处理的异常,@ResponseBody是为了返回json字符串而不是返回视图

@ControllerAdvice
public class ErrorHandler {
   @Autowired
   private Gson gson;
/**
 * 全局异常捕捉处理 
 * @param ex 
 * @return
 */
@ResponseBody
@ExceptionHandler(value = Exception.class)
public String errorHandler(Exception ex) {
    Map<String, Object> map = new HashMap<>();
    map.put("code", 500);
    map.put("msg", "全局异常");
    return gson.toJson(map);
}

/**
 * 主动抛出的业务异常抓取
 * @param se
 * @return
 */
@ResponseBody
@ExceptionHandler(value = ServiceException.class)
public String errorHandler(ServiceException se) {
    Map<String, Object> map = new HashMap<>();
    map.put("code", 500);
    map.put("msg",se.getMessage());
    return gson.toJson(map);
}
}

这样的异常处理方式只会拦截controller抛出的异常,所以,dao和service的异常都得抛出到controller层进行处理

抛出自定义的业务异常和exception异常测试一下

@ResponseBody
@RequestMapping("/testError")
public String test() throws ServiceException {
   int a = 1;
   //int a = 2;
   if(a==1){
       throw new ServiceException("测试异常");
   } else if(a==2){
       throw new Exception();
   }
   return "success"; 
}

测试可以抓取controller抛出的异常

评论

0条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注