ソースを参照

优化feign序列化逻辑

woody 1 年間 前
コミット
6b4319ef21

+ 11 - 12
framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignFailureInterceptor.java

@@ -1,14 +1,15 @@
 package com.chelvc.framework.feign.interceptor;
 
+import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 
 import com.chelvc.framework.base.context.Result;
 import com.chelvc.framework.common.exception.FrameworkException;
 import com.chelvc.framework.common.util.JacksonUtils;
+import com.chelvc.framework.common.util.StringUtils;
 import feign.Response;
 import feign.codec.ErrorDecoder;
-import lombok.NonNull;
 
 /**
  * Feign调用失败处理拦截器
@@ -20,24 +21,22 @@ public class FeignFailureInterceptor implements ErrorDecoder {
     /**
      * 反序列化请求结果
      *
-     * @param response 相应结果
+     * @param body 消息体内容
      * @return 请求结果
-     * @throws IOException I/O异常
      */
-    protected Result<?> deserialize(@NonNull Response response) throws IOException {
-        try (InputStream input = response.body().asInputStream()) {
-            return JacksonUtils.deserialize(input, Result.class);
-        }
+    protected Result<?> deserialize(String body) {
+        return JacksonUtils.deserialize(body, Result.class);
     }
 
     @Override
     public Exception decode(String method, Response response) {
-        Result<?> result;
-        try {
-            result = this.deserialize(response);
+        String body;
+        try (BufferedReader reader = new BufferedReader(response.body().asReader(StandardCharsets.UTF_8))) {
+            body = reader.readLine();
         } catch (IOException e) {
-            return e;
+            throw new RuntimeException(e);
         }
+        Result<?> result = StringUtils.isEmpty(body) ? Result.failure() : this.deserialize(body);
         return new FrameworkException(result.getCode(), result.getData(), result.getMessage());
     }
 }

+ 17 - 18
framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignInvokeInterceptor.java

@@ -38,25 +38,24 @@ public class FeignInvokeInterceptor implements RequestInterceptor {
      */
     protected void initializeRequestHeader(RequestTemplate template) {
         Session session = SessionContextHolder.getSession(false);
-        if (session != null) {
-            template.header("x-real-ip", session.getHost());
-            template.header(SessionContextHolder.HEADER_ID,
-                    (String) ObjectUtils.ifNull(session.getId(), String::valueOf));
-            template.header(SessionContextHolder.HEADER_USING,
-                    ObjectUtils.ifNull(session.getUsing(), Using::name));
-            template.header(SessionContextHolder.HEADER_SCOPE, session.getScope());
-            template.header(SessionContextHolder.HEADER_DEVICE, session.getDevice());
-            template.header(SessionContextHolder.HEADER_CHANNEL, session.getChannel());
-            template.header(SessionContextHolder.HEADER_PLATFORM,
-                    ObjectUtils.ifNull(session.getPlatform(), Platform::name));
-            template.header(SessionContextHolder.HEADER_TERMINAL,
-                    ObjectUtils.ifNull(session.getTerminal(), Terminal::name));
-            template.header(SessionContextHolder.HEADER_VERSION, session.getVersion());
-            template.header(SessionContextHolder.HEADER_ANONYMOUS, String.valueOf(session.isAnonymous()));
-            template.header(SessionContextHolder.HEADER_AUTHORITIES, session.getAuthorities());
-            template.header(SessionContextHolder.HEADER_TIMESTAMP,
-                    (String) ObjectUtils.ifNull(session.getTimestamp(), String::valueOf));
+        if (session == null) {
+            return;
         }
+        template.header("x-real-ip", session.getHost());
+        template.header(SessionContextHolder.HEADER_ID, (String) ObjectUtils.ifNull(session.getId(), String::valueOf));
+        template.header(SessionContextHolder.HEADER_USING, ObjectUtils.ifNull(session.getUsing(), Using::name));
+        template.header(SessionContextHolder.HEADER_SCOPE, session.getScope());
+        template.header(SessionContextHolder.HEADER_DEVICE, session.getDevice());
+        template.header(SessionContextHolder.HEADER_CHANNEL, session.getChannel());
+        template.header(SessionContextHolder.HEADER_PLATFORM,
+                ObjectUtils.ifNull(session.getPlatform(), Platform::name));
+        template.header(SessionContextHolder.HEADER_TERMINAL,
+                ObjectUtils.ifNull(session.getTerminal(), Terminal::name));
+        template.header(SessionContextHolder.HEADER_VERSION, session.getVersion());
+        template.header(SessionContextHolder.HEADER_ANONYMOUS, String.valueOf(session.isAnonymous()));
+        template.header(SessionContextHolder.HEADER_AUTHORITIES, session.getAuthorities());
+        template.header(SessionContextHolder.HEADER_TIMESTAMP,
+                (String) ObjectUtils.ifNull(session.getTimestamp(), String::valueOf));
     }
 
     @Override