这篇文章主要介绍了spring boot 全局异常处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
import cn.sisyphe.framework.web.exception.DataException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import javax.servlet.http.HttpServletRequest; /** * @author ming * @desc 全局异常处理类 */ @Slf4j @ControllerAdvice public class GlobalExceptionHandler { /** * 缺失请求参数处理 * * @param e * @param request * @return */ @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseBody public ResponseResult handleMissingServletRequestParameterException(MissingServletRequestParameterException e, HttpServletRequest request) { String message = "缺失请求参数" + e.getParameterName(); return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e); } /** * 请求参数类型错误处理 * * @param e * @param request * @return */ @ExceptionHandler(MethodArgumentTypeMismatchException.class) @ResponseBody public ResponseResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) { String message = "请求参数" + e.getName() + "类型错误"; return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e); } /** * 参数类型错误异常类型处理 * * @param e * @param request * @return */ @ExceptionHandler(HttpMessageConversionException.class) @ResponseBody public ResponseResult handleHttpMessageNotReadableException(HttpMessageConversionException e, HttpServletRequest request) { String message = "参数类型错误"; return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e); } /** * 空指针异常处理 * * @param e * @param request * @return */ @ExceptionHandler(NullPointerException.class) @ResponseBody public ResponseResult handleNullPointerException(NullPointerException e, HttpServletRequest request) { String message = "空指针异常"; return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value() + "", e, true); } /** * MethodArgumentNotValidException 异常处理 * @param e * @param request * @return */ @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public ResponseResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest request) { StringBuilder errorMsg = new StringBuilder(); BindingResult re = e.getBindingResult(); for (ObjectError error : re.getAllErrors()) { errorMsg.append(error.getDefaultMessage()).append(","); } errorMsg.delete(errorMsg.length() - 1, errorMsg.length()); return ackTransfer(request, errorMsg.toString(), "-1", e, false); } /** * 绑定异常处理 * @param e * @param request * @return */ @ExceptionHandler(BindException.class) @ResponseBody public ResponseResult handleBindException(BindException e,HttpServletRequest request){ BindingResult result = e.getBindingResult(); StringBuilder errorMsg = new StringBuilder(); for (ObjectError error : result.getAllErrors()) { errorMsg.append(error.getDefaultMessage()).append(","); } errorMsg.delete(errorMsg.length() - 1, errorMsg.length()); return ackTransfer(request, errorMsg.toString(), "-1", e, false); } /** * 自定义异常类型异常消息处理 * * @param e * @param request * @return */ @ExceptionHandler({DataException.class}) @ResponseBody public ResponseResult handleDataException(DataException e, HttpServletRequest request) { String message = e.getErrorMessage(); String code = e.getErrorCode(); return ackTransfer(request, code, message, e, true); } /** * 处理运行时异常 * * @param e * @param request * @return */ @ExceptionHandler({RuntimeException.class}) @ResponseBody public ResponseResult handleRuntimeException(RuntimeException e, HttpServletRequest request) { return ackTransfer(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value() + "", e, true); } /** * 默认异常处理 * * @param e * @param request * @return */ @ExceptionHandler(Exception.class) @ResponseBody public ResponseResult handleException(Exception e, HttpServletRequest request) { return ackTransfer(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value() + "", e, true); } private ResponseResult ackTransfer(HttpServletRequest request, String message, String code, Exception e, boolean printStackTrace) { ResponseResult result = new ResponseResult(); result.setCode(code); result.setMessage(message); if (printStackTrace) { log.error(message, e); } else { log.error(message); } return result; } private ResponseResult ackTransfer(HttpServletRequest request, String message, String code, Exception e) { return ackTransfer(request, message, code, e, false); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起
统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {
本文向大家介绍springboot全局异常处理代码实例,包括了springboot全局异常处理代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了springboot全局异常处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最
本文向大家介绍springboot框架的全局异常处理方案详解,包括了springboot框架的全局异常处理方案详解的使用技巧和注意事项,需要的朋友参考一下 系统框架搭建的前期过程中,为了约束代码规范,我们会对一些通用功能做一些处理,比如声明一些系统公用错误类、封装通用返回结果、统一异常处理等,这样做的优势是团队开发过程中能够形成统一的代码规范,增强代码可读性,同时又便于后期代码维护。本文主要介绍下
Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware
在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。 今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多
本文向大家介绍Springboot之自定义全局异常处理的实现,包括了Springboot之自定义全局异常处理的实现的使用技巧和注意事项,需要的朋友参考一下 前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try.
本文向大家介绍SpringBoot如何优雅地处理全局异常详解,包括了SpringBoot如何优雅地处理全局异常详解的使用技巧和注意事项,需要的朋友参考一下 前言 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}cat