diff --git a/axzo-common-autoconfigure/src/main/java/cn/axzo/framework/autoconfigure/web/exception/handler/ExceptionResultHandler.java b/axzo-common-autoconfigure/src/main/java/cn/axzo/framework/autoconfigure/web/exception/handler/ExceptionResultHandler.java index f075cd9..2ea6554 100644 --- a/axzo-common-autoconfigure/src/main/java/cn/axzo/framework/autoconfigure/web/exception/handler/ExceptionResultHandler.java +++ b/axzo-common-autoconfigure/src/main/java/cn/axzo/framework/autoconfigure/web/exception/handler/ExceptionResultHandler.java @@ -27,4 +27,8 @@ public interface ExceptionResultHandler { default boolean isRecursive() { return false; } + + default boolean shouldFilter(ExceptionResultHandler handler, Throwable e) { + return handler.getExceptionClass().isAssignableFrom(e.getClass()); + } } diff --git a/axzo-common-web/src/main/java/cn.axzo.framework.web/feign/FeignRecordExceptionInterceptor.java b/axzo-common-web/src/main/java/cn.axzo.framework.web/feign/FeignRecordExceptionInterceptor.java index 9e61580..18487e8 100644 --- a/axzo-common-web/src/main/java/cn.axzo.framework.web/feign/FeignRecordExceptionInterceptor.java +++ b/axzo-common-web/src/main/java/cn.axzo.framework.web/feign/FeignRecordExceptionInterceptor.java @@ -4,6 +4,8 @@ import feign.RequestInterceptor; import feign.RequestTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -21,6 +23,7 @@ import static cn.axzo.framework.web.exception.BasicRecordExceptionHandler.MICRO_ */ public class FeignRecordExceptionInterceptor implements RequestInterceptor { private static final Logger log = LoggerFactory.getLogger(FeignRecordExceptionInterceptor.class); + @Override public void apply(RequestTemplate template) { HttpServletRequest originalRequest = getOriginalRequest(); @@ -35,12 +38,19 @@ public class FeignRecordExceptionInterceptor implements RequestInterceptor { private void setRequestParams(RequestTemplate template, HttpServletRequest originalRequest) { String[] packageNames = originalRequest.getParameterValues(MICRO_SERVER_RECORD_ERROR_GET_PARAM_NAME); + if (Objects.isNull(packageNames) || packageNames.length == 0) { + packageNames = StringUtils.commaDelimitedListToStringArray(MDC.get(MICRO_SERVER_RECORD_ERROR_GET_PARAM_NAME)); + } template.query(MICRO_SERVER_RECORD_ERROR_GET_PARAM_NAME, packageNames); } private static void setXMetaDataTag(RequestTemplate template, HttpServletRequest originalRequest) { // 需要传递外部传入的标识 - template.header(MICRO_SERVER_RECORD_ERROR_HEADER_NAME, originalRequest.getHeader(MICRO_SERVER_RECORD_ERROR_HEADER_NAME)); + String headerValue = originalRequest.getHeader(MICRO_SERVER_RECORD_ERROR_HEADER_NAME); + if (!StringUtils.hasText(headerValue)) { + headerValue = MDC.get(MICRO_SERVER_RECORD_ERROR_HEADER_NAME); + } + template.header(MICRO_SERVER_RECORD_ERROR_HEADER_NAME, headerValue); } public static HttpServletRequest getOriginalRequest() { diff --git a/axzo-common-web/src/main/java/cn.axzo.framework.web/filter/BasicRecordExceptionFilter.java b/axzo-common-web/src/main/java/cn.axzo.framework.web/filter/BasicRecordExceptionFilter.java index 28616ba..c980f8a 100644 --- a/axzo-common-web/src/main/java/cn.axzo.framework.web/filter/BasicRecordExceptionFilter.java +++ b/axzo-common-web/src/main/java/cn.axzo.framework.web/filter/BasicRecordExceptionFilter.java @@ -1,8 +1,5 @@ package cn.axzo.framework.web.filter; -import cn.axzo.framework.validator.constraints.UTF8; -import com.google.common.collect.Lists; -import jdk.nashorn.internal.runtime.JSONFunctions; import org.slf4j.MDC; import org.springframework.core.Ordered; import org.springframework.core.PriorityOrdered; @@ -14,7 +11,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Arrays; import static cn.axzo.framework.web.exception.BasicRecordExceptionHandler.MICRO_SERVER_RECORD_ERROR_GET_PARAM_NAME; import static cn.axzo.framework.web.exception.BasicRecordExceptionHandler.MICRO_SERVER_RECORD_ERROR_HEADER_NAME;