Spring Boot 系列 @ControllerAdvice 拦截异常并统一处理

ControllerAdvice用法解析

简介

  通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。
  注解了@Controller的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
  @ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上
  @ExceptionHandler:用于全局处理控制器里的异常。

 

用法

@ControllerAdvice
@ResponseBody
//RestControllerAdvice 上面2个注释等于此一个注释
public class BusinessExceptionHandler { @ExceptionHandler(value = Exception.class) public JsonBackData exceptionHandler(HttpServletRequest request, Exception e) { e.printStackTrace(); JsonBackData back = new JsonBackData(); if (e instanceof BusinessException) { BusinessException ex = (BusinessException) e; back.setSuccess(false); back.setBackMsg(ex.getMessage()); } return back;   }
}
 

 

加了这个全局配置的Bean后,以前的代码是这样的:

  @RequestMapping(value = "queryDetail")
    @ResponseBody
    public JsonBackData queryDetail(@RequestParam String id) {
        JsonBackData back = new JsonBackData();
        try {
            OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
            back.setBackData(vo);
            back.setSuccess(true);
            back.setBackMsg("查询详细信息成功");
        } catch (BusinessException e) {
            back.setSuccess(false);
            back.setBackMsg("查询详细信息失败:" + e.getMessage());
        }
        return back;
    }

多了很多无关信息。几乎每个类都要try catch一下,代码极度冗余。
但是加了上面的全局处理控制器的异常处理后。代码就变成了下面的了。

 

@RequestMapping(value = "queryDetail")
@ResponseBody
public JsonBackData queryDetail(@RequestParam String id) {
    JsonBackData back = new JsonBackData();
    OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
    back.setBackData(vo);
    back.setSuccess(true);
    back.setBackMsg("查询详细信息成功");
    return back;
}

 

posted @ 2018-10-26 09:14  超轶绝尘  阅读(594)  评论(0编辑  收藏  举报