package com.cdzy.payment.config; import cn.dev33.satoken.exception.NotLoginException; import com.alibaba.nacos.shaded.com.google.gson.JsonSyntaxException; 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(NotLoginException.class) public JsonResult bindExceptionHandler(NotLoginException e) { log.error(e.toString()); return JsonResult.failed(e.getMessage()); } @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, Exception e) { // LogFactory.getLog(super.getClass()).error(e.getMessage(), e); log.error(request.getServletPath(), e); return JsonResult.failed(e.getMessage()); } }