zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Hibernate Annotation 生成数据库表(UUId)
    Hibernate用注解生成表
    Java语言 链接Oracle数据库
    Oracle 启动监听命令
    java.lang.IllegalArgumentException异常 数据库别名问题
    java.lang.IllegalArgumentException异常 返回值类型的问题
    java.lang.IllegalArgumentException异常 配置文件的问题
    JUnit 异常处理
    DIV水平垂直布局
    Java 链接SQL Server 数据库
  • 原文地址:https://www.cnblogs.com/guchunchao/p/9854462.html
Copyright © 2011-2022 走看看