Przeglądaj źródła

fix: 还原18N

Signed-off-by: sunshihao <sunshihaoemail>
sunshihao 4 dni temu
rodzic
commit
9fbb2df82c

+ 30 - 61
xinkeaboard-server/b2b2c-web/src/main/java/com/slodon/b2b2c/filter/ResponseI18NFilter.java

@@ -36,70 +36,47 @@ public class ResponseI18NFilter implements Filter, Ordered {
         HttpServletRequest request = (HttpServletRequest) servletRequest;
         HttpServletResponse response = (HttpServletResponse) servletResponse;
         ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(request, responseWrapper);
 
-        try {
-            filterChain.doFilter(request, responseWrapper);
-
-            // 检查是否是需要跳过的路径
-            if (request.getRequestURI().contains("api-docs") ||
-                    request.getRequestURI().contains("v3/oss/ueditor/upload")) {
-                writeResponse(response, responseWrapper);
-                return;
-            }
-
-            // 检查响应类型
-            if (!isJsonResponse(responseWrapper)) {
-                writeResponse(response, responseWrapper);
-                return;
-            }
+        if (request.getRequestURI().contains("api-docs")) {
+            response.getOutputStream().write(responseWrapper.getContent());
+            return;
+        }
 
-            // 处理JSON响应
-            processJsonResponse(request, response, responseWrapper);
-        } finally {
-            // 确保资源被正确释放
-            try {
-                responseWrapper.close();
-            } catch (Exception e) {
-                log.warn("Error closing response wrapper", e);
-            }
+        if (request.getRequestURI().contains("v3/oss/ueditor/upload")) {
+            return;
         }
-    }
 
-    private void writeResponse(HttpServletResponse response, ResponseWrapper responseWrapper) throws IOException {
-        if (!response.isCommitted()) {
+        if (!responseWrapper.getContentType().equalsIgnoreCase("application/json;charset=utf-8")) {
+            //响应类型不是json,不处理
             response.getOutputStream().write(responseWrapper.getContent());
+            return;
         }
-    }
 
-    private boolean isJsonResponse(ResponseWrapper responseWrapper) {
-        String contentType = responseWrapper.getContentType();
-        return contentType != null && contentType.toLowerCase().contains("application/json");
-    }
-
-    private void processJsonResponse(HttpServletRequest request, HttpServletResponse response, ResponseWrapper responseWrapper) throws IOException {
+        //响应二进制流
+        byte[] content = responseWrapper.getContent();
+        String s = new String(content, StandardCharsets.UTF_8);
+        JsonResult jsonResult;
         try {
-            byte[] content = responseWrapper.getContent();
-            String s = new String(content, StandardCharsets.UTF_8);
-            JsonResult jsonResult = JSON.parseObject(s, JsonResult.class);
-
-            if (jsonResult != null && !StringUtils.isEmpty(jsonResult.getMsg())) {
-                String languageType = request.getHeader("Language");
-                if (StringUtils.isEmpty(languageType)) {
-                    languageType = Language.DEFAULT_LANGUAGE_TYPE;
-                }
-                jsonResult.setMsg(Language.translate(jsonResult.getMsg(), languageType));
-            }
-
-            if (!response.isCommitted()) {
-                response.getOutputStream().write(JSON.toJSONString(jsonResult, SerializerFeature.WriteMapNullValue).getBytes());
-            }
+            jsonResult = JSON.parseObject(s, JsonResult.class);
         } catch (Exception e) {
-            log.error("Error processing JSON response for translation", e);
-            // 出现异常时返回原始内容
-            if (!response.isCommitted()) {
-                response.getOutputStream().write(responseWrapper.getContent());
+            //转换异常,直接跳过
+            response.getOutputStream().write(content);
+            return;
+        }
+
+        if (!StringUtils.isEmpty(jsonResult.getMsg())) {
+            //从请求头中获取语言类型
+            String languageType = request.getHeader("Language");
+            if (StringUtils.isEmpty(languageType)) {
+                languageType = Language.DEFAULT_LANGUAGE_TYPE;
             }
+            //翻译
+            //对响应中的msg字段进行翻译
+            jsonResult.setMsg(Language.translate(jsonResult.getMsg(), languageType));
         }
+        //重新写入响应
+        response.getOutputStream().write(JSON.toJSONString(jsonResult, SerializerFeature.WriteMapNullValue).getBytes());
     }
 
     @Override
@@ -116,14 +93,6 @@ public class ResponseI18NFilter implements Filter, Ordered {
      * 响应包装类
      */
     public class ResponseWrapper extends HttpServletResponseWrapper {
-        public void close() throws IOException {
-            if (out != null) {
-                out.close();
-            }
-            if (buffer != null) {
-                buffer.close();
-            }
-        }
 
         private ByteArrayOutputStream buffer;