public class ServiceException extends RuntimeException { private ServiceCode serviceCode; public ServiceException(ServiceCode serviceCode, String message) { super(message); this.serviceCode = serviceCode; } public ServiceCode getServiceCode() { return serviceCode; } }
@Slf4j @RestControllerAdvice public class GlobalExceptionHandler { public GlobalExceptionHandler() { log.debug("创建全局异常处理器对象:GlobalExceptionHandler"); } @ExceptionHandler public JsonResult<Void> handleServiceException(ServiceException e) { log.debug("开始处理ServiceException"); return JsonResult.fail(e); } @ExceptionHandler public JsonResult<Void> handleBindException(BindException e) { log.debug("开始处理BindException"); String defaultMessage = e.getFieldError().getDefaultMessage(); return JsonResult.fail(ServiceCode.ERR_BAD_REQUEST, defaultMessage); } @ExceptionHandler public JsonResult<Void> handleConstraintViolationException(ConstraintViolationException e) { log.debug("开始处理ConstraintViolationException"); StringJoiner stringJoiner = new StringJoiner(","); Set<ConstraintViolation<?>> constraintViolations = e.getConstraintViolations(); for (ConstraintViolation<?> constraintViolation : constraintViolations) { stringJoiner.add(constraintViolation.getMessage()); } return JsonResult.fail(ServiceCode.ERR_BAD_REQUEST, stringJoiner.toString()); } }