spring boot 全局异常处理方法汇总
这篇文章主要介绍了springboot全局异常处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
importcn.sisyphe.framework.web.exception.DataException; importlombok.extern.slf4j.Slf4j; importorg.springframework.http.HttpStatus; importorg.springframework.http.converter.HttpMessageConversionException; importorg.springframework.validation.BindException; importorg.springframework.validation.BindingResult; importorg.springframework.validation.ObjectError; importorg.springframework.web.bind.MethodArgumentNotValidException; importorg.springframework.web.bind.MissingServletRequestParameterException; importorg.springframework.web.bind.annotation.ControllerAdvice; importorg.springframework.web.bind.annotation.ExceptionHandler; importorg.springframework.web.bind.annotation.ResponseBody; importorg.springframework.web.method.annotation.MethodArgumentTypeMismatchException; importjavax.servlet.http.HttpServletRequest; /** *@authorming *@desc全局异常处理类 */ @Slf4j @ControllerAdvice publicclassGlobalExceptionHandler{ /** *缺失请求参数处理 * *@parame *@paramrequest *@return */ @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseBody publicResponseResulthandleMissingServletRequestParameterException(MissingServletRequestParameterExceptione,HttpServletRequestrequest){ Stringmessage="缺失请求参数"+e.getParameterName(); returnackTransfer(request,message,HttpStatus.BAD_REQUEST.value()+"",e); } /** *请求参数类型错误处理 * *@parame *@paramrequest *@return */ @ExceptionHandler(MethodArgumentTypeMismatchException.class) @ResponseBody publicResponseResulthandleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchExceptione,HttpServletRequestrequest){ Stringmessage="请求参数"+e.getName()+"类型错误"; returnackTransfer(request,message,HttpStatus.BAD_REQUEST.value()+"",e); } /** *参数类型错误异常类型处理 * *@parame *@paramrequest *@return */ @ExceptionHandler(HttpMessageConversionException.class) @ResponseBody publicResponseResulthandleHttpMessageNotReadableException(HttpMessageConversionExceptione,HttpServletRequestrequest){ Stringmessage="参数类型错误"; returnackTransfer(request,message,HttpStatus.BAD_REQUEST.value()+"",e); } /** *空指针异常处理 * *@parame *@paramrequest *@return */ @ExceptionHandler(NullPointerException.class) @ResponseBody publicResponseResulthandleNullPointerException(NullPointerExceptione,HttpServletRequestrequest){ Stringmessage="空指针异常"; returnackTransfer(request,message,HttpStatus.BAD_REQUEST.value()+"",e,true); } /** *MethodArgumentNotValidException异常处理 *@parame *@paramrequest *@return */ @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody publicResponseResulthandleMethodArgumentNotValidException(MethodArgumentNotValidExceptione,HttpServletRequestrequest){ StringBuildererrorMsg=newStringBuilder(); BindingResultre=e.getBindingResult(); for(ObjectErrorerror:re.getAllErrors()){ errorMsg.append(error.getDefaultMessage()).append(","); } errorMsg.delete(errorMsg.length()-1,errorMsg.length()); returnackTransfer(request,errorMsg.toString(),"-1",e,false); } /** *绑定异常处理 *@parame *@paramrequest *@return */ @ExceptionHandler(BindException.class) @ResponseBody publicResponseResulthandleBindException(BindExceptione,HttpServletRequestrequest){ BindingResultresult=e.getBindingResult(); StringBuildererrorMsg=newStringBuilder(); for(ObjectErrorerror:result.getAllErrors()){ errorMsg.append(error.getDefaultMessage()).append(","); } errorMsg.delete(errorMsg.length()-1,errorMsg.length()); returnackTransfer(request,errorMsg.toString(),"-1",e,false); } /** *自定义异常类型异常消息处理 * *@parame *@paramrequest *@return */ @ExceptionHandler({DataException.class}) @ResponseBody publicResponseResulthandleDataException(DataExceptione,HttpServletRequestrequest){ Stringmessage=e.getErrorMessage(); Stringcode=e.getErrorCode(); returnackTransfer(request,code,message,e,true); } /** *处理运行时异常 * *@parame *@paramrequest *@return */ @ExceptionHandler({RuntimeException.class}) @ResponseBody publicResponseResulthandleRuntimeException(RuntimeExceptione,HttpServletRequestrequest){ returnackTransfer(request,e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR.value()+"",e,true); } /** *默认异常处理 * *@parame *@paramrequest *@return */ @ExceptionHandler(Exception.class) @ResponseBody publicResponseResulthandleException(Exceptione,HttpServletRequestrequest){ returnackTransfer(request,e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR.value()+"",e,true); } privateResponseResultackTransfer(HttpServletRequestrequest,Stringmessage,Stringcode,Exceptione,booleanprintStackTrace){ ResponseResultresult=newResponseResult(); result.setCode(code); result.setMessage(message); if(printStackTrace){ log.error(message,e); }else{ log.error(message); } returnresult; } privateResponseResultackTransfer(HttpServletRequestrequest,Stringmessage,Stringcode,Exceptione){ returnackTransfer(request,message,code,e,false); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。