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; + } +}