diff --git a/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java b/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java index 4c42d5b..d6cdbca 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java @@ -26,6 +26,22 @@ import java.util.Map; @Slf4j @Service public class UserSyncService { + + /** + * 转义JSON字符串中的特殊字符 + */ + private String escapeJson(String str) { + if (str == null) { + return ""; + } + return str.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\b", "\\b") + .replace("\f", "\\f") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\t", "\\t"); + } @Resource private ConfigProperties configProperties; @@ -55,29 +71,32 @@ public class UserSyncService { } try { - // 构建请求体 - JSONObject userCache = new JSONObject(); - userCache.put("userId", user.getUserId()); - userCache.put("username", user.getUsername()); - userCache.put("nickname", user.getNickname()); - userCache.put("avatar", user.getAvatar()); - userCache.put("phone", user.getPhone()); - userCache.put("status", user.getStatus()); - userCache.put("updateTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - // tenantId 可能为 null,但在 websopy 端是必填字段,至少传 0 - // 注意:websopy 端数据库字段是 tenant_id(下划线),不是 tenantId(驼峰) + // 构建请求体 - 使用手动JSON构建确保字段正确 Integer tenantIdValue = user.getTenantId() != null ? user.getTenantId() : 0; - userCache.put("tenant_id", tenantIdValue); - + + // 构建JSON字符串,确保tenant_id字段存在且不为null + StringBuilder jsonBuilder = new StringBuilder(); + jsonBuilder.append("{"); + jsonBuilder.append("\"userId\":").append(user.getUserId()).append(","); + jsonBuilder.append("\"username\":\"").append(escapeJson(user.getUsername())).append("\","); + jsonBuilder.append("\"nickname\":\"").append(escapeJson(user.getNickname())).append("\","); + jsonBuilder.append("\"avatar\":\"").append(escapeJson(user.getAvatar())).append("\","); + jsonBuilder.append("\"phone\":\"").append(escapeJson(user.getPhone())).append("\","); + jsonBuilder.append("\"status\":").append(user.getStatus()).append(","); + jsonBuilder.append("\"updateTime\":\"").append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).append("\","); + jsonBuilder.append("\"tenantId\":").append(tenantIdValue).append(","); // 驼峰格式 + jsonBuilder.append("\"tenant_id\":").append(tenantIdValue); // 下划线格式 + jsonBuilder.append("}"); + String url = websopyBaseUrl + "/api/app/user-sync/single"; - String body = userCache.toJSONString(); + String body = jsonBuilder.toString(); log.info("同步用户到 websopy: userId={}, username={}, nickname={}, phone={}, tenantId={}, url={}", user.getUserId(), user.getUsername(), user.getNickname(), user.getPhone(), user.getTenantId(), url); - log.debug("同步用户请求体: {}", body); + log.info("同步用户请求体JSON: {}", body); // 改为info级别以便查看 // 额外日志:tenantId 值检查 - log.debug("tenantId检查 - 原始值: {}, 转换后值: {}, 请求体中tenant_id字段: {}", - user.getTenantId(), tenantIdValue, userCache.get("tenant_id")); + log.debug("tenantId检查 - 原始值: {}, 转换后值: {}", + user.getTenantId(), tenantIdValue); // 发送 HTTP POST 请求 Map headers = new HashMap<>();