spring boot 全局异常处理方法汇总

网友投稿 523 2023-07-17

spring boot 全局异常处理方法汇总

spring boot 全局异常处理方法汇总

这篇文章主要介绍了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 ResponseResrsShzLiPwult 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(HttpServhttp://letRequest 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);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springcloud中的region和zone的使用实例
下一篇:Spring创建IOC容器的方式解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~