详解弹簧引导/弹簧统一错误处理方案的使用

  

当我们开发spring web应用程序时,对于如<代码> IOException ,<代码> ClassNotFoundException 之类的检查异常,往往编译器会提示程序员采用try - catch <代码> 进行显式捕获,而对于像<代码> ClassCastException ,<代码> NullPointerException 这类非检查异常,编译器是不会提示你了,这往往也是能体现程序员代码编写能力的一个方面。

  

在spring web特别是spring-boot应用中,当一个请求调用成功时,一般情况下会返回<代码> json代码格式的对象,就像下面图所示:

  

<人物> 详解弹簧引导/弹簧统一错误处理方案的使用“>,</p>
  <p>但如果请求抛出了一个<代码> RuntimeException> </代码呢?如果我们不做处理,再次调用时将出现下面的页面:</p>
  <p> <人物> </图> <img src=   包com.example.demo.controller.handler.errorpage;      进口org.springframework.boot.web.servlet.error.ErrorController;   进口org.springframework.stereotype.Controller;   进口org.springframework.web.bind.annotation.RequestMapping;/* *   *   *类MyErrorPageController。   *   *描述:自定义错误页面   *   * @author: huangjiawei   * @since: 2018年6月13日   * @version:修订日期LastChangedBy美元美元美元   *   */@ controller   公共类MyErrorPageController实现ErrorController {      @RequestMapping(“/错误”)   公共字符串handleError () {   返回“error.html”;//该资源位于资源/静态目录下   }      @Override   公共字符串getErrorPath () {   返回null;   }   }      

然后在<代码> reosurces/静态代码目录下建立<代码>错误。>         & lt; !DOCTYPE html>   & lt; html>   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt; title>插入标题here   & lt;/head>   & lt; body>   & lt; h2>这是个错误页面!存放在资源/静态目录下,spring-boot发生错误时默认调用& lt;/h2>   & lt;/body>   & lt;/html>      

再次请求<代码> http://localhost: 7000/演示/getUserInfoWithNoHandler。json>   

<人物> 详解弹簧引导/弹簧统一错误处理方案的使用“> 2,使用<代码> @ControllerAdvice </代码>,<代码> @ResponseBody </代码>,<代码> @ExceptionHandler </代码>统一处理异常</p>
  <p>在春天中可以使用上面3个注解进行统一异常处理,默认情况下我们可以针对系统中出现的某种类型的异常定义一个统一的处理器处理程序,比如说系统抛出了一个<代码> NullPointerException> </代码,那么我们可以定义一个专门针对<代码> NullPointerException> </代码的处理器,代码如下:</p>
  <p> <代码> getUserInfoWithNullPointerException </代码>接口</p>
  
  <pre类=/* *   *测试空指针错误的处理   * @return   * @throws NullPointerException   */@RequestMapping (value=" https://www.yisu.com/zixun/getUserInfoWithNullPointerException.json ",方法=RequestMethod.GET)   公开学生getUserInfoWithNullPointerException()抛出NullPointerException {   把新NullPointerException ();   }      

<代码> NullPointerExceptionHandler.java

        包com.example.demo.controller.handler;      进口org.springframework.web.bind.annotation.ControllerAdvice;   进口org.springframework.web.bind.annotation.ExceptionHandler;   进口org.springframework.web.bind.annotation.ResponseBody;      进口com.example.demo.pojo.ErrorReturn;/* *   *   *类NullPointerExceptionHandler。   *   *描述:处理空指针   *   * @author: huangjiawei   * @since: 2018年6月13日   * @version:修订日期LastChangedBy美元美元美元   *   */@ControllerAdvice   公开课NullPointerExceptionHandler {   @ExceptionHandler (NullPointerException.class)   @ResponseBody   公共ErrorReturn dealNullPointerException () {   e.printStackTrace ();   ErrorReturn错误=new ErrorReturn ();   error.setReturnCode (" 1 ");   error.setDesc(“出现空指针异常啦!”);   返回错误;   }   }

详解弹簧引导/弹簧统一错误处理方案的使用