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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。