why?
在Controller调Service方法时,总是会使用一个大的try-catch来包裹业务层代码,很烦,就像这样:
@GetMapping("/rushToBuy")
public ReturnResult rushToBuy(@RequestParam String goodsId, @RequestParam String userId) {
try {
Integer integer = rushToBuyService.rushToBuy(goodsId, userId);
return ReturnUtil.returnSuccess();
} catch (Exception e) {
log.error("购物发生异常:", e);
return ReturnUtil.returnFail(401, "购买中发生异常");
}
}
how?
- 使用@ControllerAdvice注解来申明一些全局性的东西
- 使用@RestControllerAdvice也行
- 使用@ExceptionHandler注解来申明一个异常处理器
- 此处指定捕获Exception异常表示捕获所有的异常
- 可以指定特定的异常来捕获,优先级要高于Exception
@RestControllerAdvice
public class GlobalHandlerConfig {
@ExceptionHandler(value = Exception.class)
public ReturnResult handler(Exception e) {
log.error("处理业务时发生异常", e);
return ReturnUtil.returnFail(500, e.getMessage());
}
}