From 7f6933b05a00bf1ebcbd967e6d448607b37d8bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 16 Mar 2026 12:44:38 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E6=94=B6=E8=B4=A7=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B91111?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LongFromStringDeserializer.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/receiptMaterialDetail/LongFromStringDeserializer.java diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/receiptMaterialDetail/LongFromStringDeserializer.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/receiptMaterialDetail/LongFromStringDeserializer.java new file mode 100644 index 000000000..ca7ef7a5e --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/receiptMaterialDetail/LongFromStringDeserializer.java @@ -0,0 +1,31 @@ +package com.mhd.wms.interfaces.dto.receiptMaterialDetail; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; + +/** + * Long 反序列化器:支持从字符串或数字解析,避免 JavaScript 大整数精度丢失。 + * 前端应始终以字符串形式传递 uniqueId、parentUniqueId、inUniqueId 等大 Long 字段。 + */ +public class LongFromStringDeserializer extends JsonDeserializer { + + @Override + public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonNode node = p.readValueAsTree(); + if (node == null || node.isNull()) { + return null; + } + if (node.isTextual()) { + String s = node.asText(); + return s == null || s.isEmpty() ? null : Long.parseLong(s.trim()); + } + if (node.isNumber()) { + return node.asLong(); + } + return null; + } +}