From 102e33de36b673e92160ff7ef2cf229af56f6fe4 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 20 Oct 2025 10:45:11 +0800 Subject: [PATCH] =?UTF-8?q?perf(X-Pack):=20=E5=AF=B9=E6=8E=A5=20Oauth2=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=B1=9E=E6=80=A7=E6=98=A0=E5=B0=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BD=BF=E7=94=A8=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/utils/MappingUtils.java | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/sdk/common/src/main/java/io/dataease/utils/MappingUtils.java b/sdk/common/src/main/java/io/dataease/utils/MappingUtils.java index 28bb398232..a022d09276 100644 --- a/sdk/common/src/main/java/io/dataease/utils/MappingUtils.java +++ b/sdk/common/src/main/java/io/dataease/utils/MappingUtils.java @@ -1,6 +1,7 @@ package io.dataease.utils; import java.util.HashMap; +import java.util.List; import java.util.Map; public class MappingUtils { @@ -23,12 +24,48 @@ public class MappingUtils { Object current = sourceMap; for (String key : keys) { - if (!(current instanceof Map)) { + if (current == null) { return null; } - @SuppressWarnings("unchecked") - Map currentMap = (Map) current; - current = currentMap.get(key); + + if (key.matches(".+\\[\\d+]")) { + String propertyName = key.replaceAll("\\[\\d+]", ""); + String indexStr = key.replaceAll(".*\\[(\\d+)]", "$1"); + + if (!(current instanceof Map)) { + return null; + } + + @SuppressWarnings("unchecked") + Map currentMap = (Map) current; + Object arrayOrList = currentMap.get(propertyName); + + if (!(arrayOrList instanceof List)) { + return null; + } + + @SuppressWarnings("unchecked") + List list = (List) arrayOrList; + + try { + int index = Integer.parseInt(indexStr); + if (index < 0 || index >= list.size()) { + return null; + } + current = list.get(index); + } catch (NumberFormatException e) { + return null; + } + } else { + // 普通对象属性 + if (!(current instanceof Map)) { + return null; + } + + @SuppressWarnings("unchecked") + Map currentMap = (Map) current; + current = currentMap.get(key); + } if (current == null) { return null;