diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365ApiServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365ApiServiceImpl.java index eb4d7f3..d425a00 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365ApiServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WPS365ApiServiceImpl.java @@ -30,10 +30,16 @@ public class WPS365ApiServiceImpl implements IWPS365ApiService { public JSONObject getUserInfo(String accessToken) { try { // WPS365用户信息API: GET /api/v1/user/info + // 注意:如果此API不存在或需要不同的路径,请查看WPS365官方文档 String url = wps365Config.getApiBaseUrl() + "/user/info"; - return WPS365ApiUtil.httpRequest("GET", url, accessToken, null); + log.debug("调用用户信息API: {}", url); + JSONObject result = WPS365ApiUtil.httpRequest("GET", url, accessToken, null); + log.debug("用户信息API响应: {}", result); + return result; } catch (Exception e) { - log.error("获取用户信息失败", e); + log.error("获取用户信息失败 - url: {}, error: {}", + wps365Config.getApiBaseUrl() + "/user/info", e.getMessage(), e); + // 不抛出异常,让调用方处理(使用降级方案) throw new RuntimeException("获取用户信息失败: " + e.getMessage(), e); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/WPS365ApiUtil.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/WPS365ApiUtil.java index bc816e0..0b797fc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/WPS365ApiUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/WPS365ApiUtil.java @@ -6,6 +6,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -140,19 +141,39 @@ public class WPS365ApiUtil { // 读取响应 int statusCode = conn.getResponseCode(); - BufferedReader reader; - if (statusCode >= 200 && statusCode < 300) { - reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); - } else { - reader = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8)); - } - StringBuilder response = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - response.append(line); + + try { + BufferedReader reader; + InputStream inputStream; + + if (statusCode >= 200 && statusCode < 300) { + inputStream = conn.getInputStream(); + } else { + // 对于错误响应,尝试读取错误流 + inputStream = conn.getErrorStream(); + // 如果错误流为null,尝试读取正常流(某些服务器可能将错误信息放在正常流中) + if (inputStream == null) { + inputStream = conn.getInputStream(); + } + } + + // 如果输入流仍然为null,说明无法读取响应 + if (inputStream == null) { + log.warn("无法读取HTTP响应流,状态码: {}", statusCode); + response.append("无法读取响应内容"); + } else { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + } + } catch (Exception e) { + log.error("读取HTTP响应失败", e); + response.append("读取响应失败: ").append(e.getMessage()); } - reader.close(); String responseStr = response.toString(); log.info("刷新访问令牌响应: statusCode={}, response={}", statusCode, responseStr); @@ -205,25 +226,45 @@ public class WPS365ApiUtil { // 读取响应 int statusCode = conn.getResponseCode(); - BufferedReader reader; - if (statusCode >= 200 && statusCode < 300) { - reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); - } else { - reader = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8)); - } - StringBuilder response = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - response.append(line); + + try { + BufferedReader reader; + InputStream inputStream; + + if (statusCode >= 200 && statusCode < 300) { + inputStream = conn.getInputStream(); + } else { + // 对于错误响应,尝试读取错误流 + inputStream = conn.getErrorStream(); + // 如果错误流为null,尝试读取正常流(某些服务器可能将错误信息放在正常流中) + if (inputStream == null) { + inputStream = conn.getInputStream(); + } + } + + // 如果输入流仍然为null,说明无法读取响应 + if (inputStream == null) { + log.warn("无法读取HTTP响应流,状态码: {}", statusCode); + response.append("无法读取响应内容"); + } else { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + } + } catch (Exception e) { + log.error("读取HTTP响应失败", e); + response.append("读取响应失败: ").append(e.getMessage()); } - reader.close(); String responseStr = response.toString(); log.debug("HTTP响应: statusCode={}, response={}", statusCode, responseStr); if (statusCode < 200 || statusCode >= 300) { - throw new RuntimeException("HTTP请求失败: " + statusCode + ", response=" + responseStr); + throw new RuntimeException("HTTP请求失败: statusCode=" + statusCode + ", response=" + responseStr); } if (responseStr == null || responseStr.trim().isEmpty()) {