|
@@ -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;
|
|
|
|