ebike-plus/ebike-user/src/main/java/com/cdzy/user/config/GlobalExceptionHandler.java

130 lines
4.7 KiB
Java

package com.cdzy.user.config;
import com.alibaba.nacos.shaded.com.google.gson.JsonSyntaxException;
import com.cdzy.common.ex.EbikeException;
import com.cdzy.common.model.response.JsonResult;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.UnexpectedTypeException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageConversionException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLSyntaxErrorException;
/**
* 全局异常处理
* @author attiya
* @since 2023-6-14
*
*/
@RestControllerAdvice(annotations = RestController.class)
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
public JsonResult<?> bindExceptionHandler(BindException e) {
log.error(e.toString());
return JsonResult.failed(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public JsonResult<?> bindExceptionHandler(MethodArgumentNotValidException e) {
log.error(e.toString());
String message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
return JsonResult.failed(message);
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, JsonSyntaxException e) {
log.error(request.getServletPath(), e);
return JsonResult.failed("数据格式化错误");
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, SQLSyntaxErrorException e) {
// LogFactory.getLog(super.getClass()).error(e.getMessage(), e);
log.error(request.getServletPath(), e);
return JsonResult.failed("系统错误");
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, BadSqlGrammarException e) {
// LogFactory.getLog(super.getClass()).error(e.getMessage(), e);
log.error(request.getServletPath(), e);
return JsonResult.failed("系统错误");
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, NumberFormatException e) {
// LogFactory.getLog(super.getClass()).error(e.getMessage(), e);
log.error(request.getServletPath(), e);
return JsonResult.failed(e.getMessage());
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, HttpMessageNotReadableException e) {
log.error(request.getServletPath(), e);
return JsonResult.failed("请输入指定格式的参数");
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, UnexpectedTypeException e) {
// e.printStackTrace();
log.error(request.getServletPath());
return JsonResult.failed(e.getMessage());
}
@ExceptionHandler({ConstraintViolationException.class})
@ResponseBody
public JsonResult<?> handleMethodArgumentNotValidException(HttpServletRequest request, ConstraintViolationException e) {
// e.printStackTrace();
log.error(request.getServletPath(), e);
String[] msgs = e.getMessage().split(":");
return JsonResult.failed(msgs[msgs.length - 1].trim());
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, HttpMessageConversionException e) {
log.error(request.getServletPath(), e);
return JsonResult.failed(e.getMessage());
}
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, EbikeException e) {
// LogFactory.getLog(super.getClass()).error(e.getMessage(), e);
log.error(request.getServletPath(), e);
return JsonResult.failed(e.getMessage());
}
/**
* 处理其他类型异常
* @param request 请求
* @param e 异常
* @return 结果
*/
@ResponseBody
@ExceptionHandler
public JsonResult<?> exp(HttpServletRequest request, Exception e) {
// LogFactory.getLog(super.getClass()).error(e.getMessage(), e);
log.error(request.getServletPath(), e);
return JsonResult.failed("系统内部发生错误,请联系工作人员");
}
}