From 9311b5e2eeeeb4bcfa834367ce4f32367e1bc63d Mon Sep 17 00:00:00 2001 From: zch Date: Mon, 30 Jun 2025 18:43:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor(dms):=20=E5=A2=9E=E5=8A=A0=20PDA=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7=E5=A4=84=E7=90=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 sanitizeForPda 方法,用于清理和转义特殊字符,确保 JSON 解析兼容性 - 添加 successForPda 和 errorForPda 方法,为 PDA 端提供增强的响应处理 - 这些改动旨在解决 PDA 端数据安全和 JSON 解析相关的问题 --- .../dromara/dms/domain/mobile/AjaxResult.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/mobile/AjaxResult.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/mobile/AjaxResult.java index 5bfd3e1..9132ac6 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/mobile/AjaxResult.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/mobile/AjaxResult.java @@ -201,4 +201,89 @@ public class AjaxResult extends HashMap { super.put(key, value); return this; } + + /** + * PDA端数据安全处理:清理和转义特殊字符,确保JSON解析兼容性 + * + * @param input 输入字符串 + * @return 处理后的安全字符串 + */ + public static String sanitizeForPda(String input) { + if (input == null) { + return null; + } + + // 【PDA兼容性处理】移除或替换可能导致JSON解析问题的特殊字符 + return input + // 移除控制字符和不可见字符 + .replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "") + // 替换可能导致JSON解析问题的特殊字符 + .replace("\"", "'") // 双引号替换为单引号 + .replace("\\", "/") // 反斜杠替换为正斜杠 + // 保留中文字符和常用特殊字符,但确保格式安全 + .trim(); + } + + /** + * 为PDA端提供增强的成功响应,确保数据安全和JSON编码正确 + * + * @param data 响应数据 + * @return AjaxResult + */ + public static AjaxResult successForPda(Object data) { + return successForPda("操作成功", data); + } + + /** + * 为PDA端提供增强的成功响应,确保数据安全和JSON编码正确 + * + * @param msg 返回消息 + * @param data 响应数据 + * @return AjaxResult + */ + public static AjaxResult successForPda(String msg, Object data) { + // 对消息进行安全处理 + String safeMsg = sanitizeForPda(msg); + + // 如果数据是字符串,也进行安全处理 + Object safeData = data; + if (data instanceof String) { + safeData = sanitizeForPda((String) data); + } + + AjaxResult result = new AjaxResult(HttpStatus.SUCCESS, safeMsg, safeData); + + // 【PDA兼容性】设置响应头确保正确的字符编码 + // 注意:这里不直接操作HttpServletResponse,而是依赖Spring Boot的默认配置 + // Spring Boot 默认已经设置了 UTF-8 编码,无需手动干预 + + return result; + } + + /** + * 为PDA端提供增强的错误响应,确保数据安全 + * + * @param msg 错误消息 + * @return AjaxResult + */ + public static AjaxResult errorForPda(String msg) { + return errorForPda(msg, null); + } + + /** + * 为PDA端提供增强的错误响应,确保数据安全 + * + * @param msg 错误消息 + * @param data 错误数据 + * @return AjaxResult + */ + public static AjaxResult errorForPda(String msg, Object data) { + String safeMsg = sanitizeForPda(msg); + Object safeData = data; + if (data instanceof String) { + safeData = sanitizeForPda((String) data); + } + + return new AjaxResult(HttpStatus.ERROR, safeMsg, safeData); + } } \ No newline at end of file