弹簧引导统一异常处理详解

  

弹簧引导中默认带了错误的映射,但是这个错误页面显示给用户并不是很友好。

  

<强>统一异常处理

  

通过使用@ControllerAdvice定义统一异常处理的类,而不是在每个控制器中逐个定义。

  

@ExceptionHandler用来定义函数针对的函数类型,最后将异常对象和请求URL映射到URL中。

        @ControllerAdvice   类ExceptionTranslator {   公共静态最终字符串DEFAULT_ERROR_VIEW=按砦蟆?   @ExceptionHandler (value=https://www.yisu.com/zixun/Exception.class)   公共ModelAndView defaultErrorHandler (HttpServletRequest点播、异常e){抛出异常   ModelAndView飞行器=new ModelAndView ();   飞行器。addObject(“例外”,e);   飞行器。addObject (“url”, req.getRequestURL ());   mav.setViewName (DEFAULT_ERROR_VIEW);   返回飞行器;   }   }      

<>强实现error.html页面展示

  

在模板目录下创建错误。html。
  

  

例如:         & lt; !DOCTYPE html>   & lt; html>   & lt;头lang=癳n”比;   & lt;元charset=" utf - 8 "/比;   & lt; title>统一异常处理& lt;/title>   & lt;/head>   & lt; body>   & lt; h2>错误Handler   & lt; div th:文本=" $ {url} "祝辞& lt;/div>   & lt; div th:文本=" $ {exception.message} "祝辞& lt;/div>   & lt;/body>   & lt;/html>      

<强>返回使用Json格式

  

只需在@ExceptionHandler之后加入@ResponseBody,就能让处理函数返回的内容转换为JSON格式

  

创建一个JSON返回对象,如:

        公共类ErrorDTO实现Serializable {   私有静态最终长serialVersionUID l=1;   私人最终字符串消息;   私人最终字符串描述;   私人ListfieldErrors;//getter和setter省略   }      

可以为指定的异常添加异常处理

        @ExceptionHandler (ConcurrencyFailureException.class)   @ResponseStatus (HttpStatus.CONFLICT)   @ResponseBody   公共ErrorDTO processConcurencyError (ConcurrencyFailureException特异){   返回新ErrorDTO (ErrorConstants.ERR_CONCURRENCY_FAILURE);   }      

ErrorConstants。ERR_CONCURRENCY_FAILURE是定义的一个异常信息。

  

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

弹簧引导统一异常处理详解