diff --git a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/handler/GlobalExceptionHandler.java b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/handler/GlobalExceptionHandler.java index 1aa9a992..68bf123d 100644 --- a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/handler/GlobalExceptionHandler.java +++ b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/handler/GlobalExceptionHandler.java @@ -82,8 +82,9 @@ private ResponseBodyBean setResponseBody(ServerHttpResponse response, Throwab try { return objectMapper.readValue(exception.getResponseBodyAsString(), ResponseBodyBean.class); } catch (JsonProcessingException e) { - log.warn("Exception occurred when writing response", e); - return ResponseBodyBean.ofStatus(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage()); + log.warn("Exception occurred when writing response. Exception message: {}", e.getMessage()); + return ResponseBodyBean.ofStatus(exception.getStatusCode(), + exception.getResponseBodyAsString(StandardCharsets.UTF_8)); } } response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/aspect/ExceptionControllerAdvice.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/aspect/ExceptionControllerAdvice.java index e2ae930a..218d04ee 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/aspect/ExceptionControllerAdvice.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/aspect/ExceptionControllerAdvice.java @@ -1,5 +1,6 @@ package com.jmsoftware.maf.springcloudstarter.aspect; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.jmsoftware.maf.common.bean.ResponseBodyBean; @@ -26,6 +27,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.ConstraintViolationException; +import java.lang.reflect.UndeclaredThrowableException; import java.util.Objects; /** @@ -200,6 +202,20 @@ public ResponseBodyBean handlePersistenceException(HttpServletRequest request removeLineSeparator(exception.getMessage()))); } + @ExceptionHandler(UndeclaredThrowableException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseBodyBean handleError(UndeclaredThrowableException exception) { + log.error("Undeclared throwable exception occurred! Exception message: {} ", exception.getMessage(), exception); + if (ObjectUtil.isNotNull(exception.getCause()) && StrUtil.isNotEmpty(exception.getCause().getMessage())) { + return ResponseBodyBean.ofStatus(HttpStatus.INTERNAL_SERVER_ERROR, + String.format("Exception message: %s", + removeLineSeparator(exception.getCause().getMessage()))); + } + return ResponseBodyBean.ofStatus(HttpStatus.INTERNAL_SERVER_ERROR, + String.format("Exception message: %s", + removeLineSeparator(exception.getMessage()))); + } + @ExceptionHandler(Throwable.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseBodyBean handleError(Throwable ex) {