why?

在Controller调Service方法时,总是会使用一个大的try-catch来包裹业务层代码,很烦,就像这样:

  1. @GetMapping("/rushToBuy")
  2. public ReturnResult rushToBuy(@RequestParam String goodsId, @RequestParam String userId) {
  3. try {
  4. Integer integer = rushToBuyService.rushToBuy(goodsId, userId);
  5. return ReturnUtil.returnSuccess();
  6. } catch (Exception e) {
  7. log.error("购物发生异常:", e);
  8. return ReturnUtil.returnFail(401, "购买中发生异常");
  9. }
  10. }

how?

  • 使用@ControllerAdvice注解来申明一些全局性的东西
    • 使用@RestControllerAdvice也行
  • 使用@ExceptionHandler注解来申明一个异常处理器
    • 此处指定捕获Exception异常表示捕获所有的异常
    • 可以指定特定的异常来捕获,优先级要高于Exception
      1. @RestControllerAdvice
      2. public class GlobalHandlerConfig {
      3. @ExceptionHandler(value = Exception.class)
      4. public ReturnResult handler(Exception e) {
      5. log.error("处理业务时发生异常", e);
      6. return ReturnUtil.returnFail(500, e.getMessage());
      7. }
      8. }