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抛出的异常
发表回复