Skip to content

Commit 6ca6c34

Browse files
🎨 #4056 修复 GsonHelper 在读取数组属性时的健壮性问题
1 parent eeb37cd commit 6ca6c34

2 files changed

Lines changed: 29 additions & 4 deletions

File tree

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public static float getAsPrimitiveFloat(JsonElement element) {
108108
}
109109

110110
public static Integer[] getIntArray(JsonObject o, String string) {
111-
JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string));
111+
JsonArray jsonArray = getAsJsonArray(o.get(string));
112112
if (jsonArray == null) {
113113
return null;
114114
}
@@ -122,7 +122,7 @@ public static Integer[] getIntArray(JsonObject o, String string) {
122122
}
123123

124124
public static String[] getStringArray(JsonObject o, String string) {
125-
JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string));
125+
JsonArray jsonArray = getAsJsonArray(o.get(string));
126126
if (jsonArray == null) {
127127
return null;
128128
}
@@ -136,7 +136,7 @@ public static String[] getStringArray(JsonObject o, String string) {
136136
}
137137

138138
public static Long[] getLongArray(JsonObject o, String string) {
139-
JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string));
139+
JsonArray jsonArray = getAsJsonArray(o.get(string));
140140
if (jsonArray == null) {
141141
return null;
142142
}
@@ -150,7 +150,7 @@ public static Long[] getLongArray(JsonObject o, String string) {
150150
}
151151

152152
public static JsonArray getAsJsonArray(JsonElement element) {
153-
return element == null ? null : element.getAsJsonArray();
153+
return (element == null || !element.isJsonArray()) ? null : element.getAsJsonArray();
154154
}
155155

156156
/**

weixin-java-common/src/test/java/me/chanjar/weixin/common/util/json/GsonHelperTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,29 @@ public void testBuildSimpleJsonObject() {
136136
System.out.println(GsonHelper.buildJsonObject(1, true, "jsonElement", new JsonObject()));
137137
System.out.println(GsonHelper.buildJsonObject("num", 2, "string", "cde", "char", 'a', "bool", true));
138138
}
139+
140+
/**
141+
* If the JSON property exists but is NOT a JSON array (e.g. a plain string),
142+
* getIntArray should return null gracefully rather than throwing ClassCastException.
143+
*/
144+
@Test
145+
public void testGetIntArrayNonArrayProperty() {
146+
JsonObject json = new JsonObject();
147+
json.addProperty("items", "not-an-array");
148+
assertThat(GsonHelper.getIntArray(json, "items")).isNull();
149+
}
150+
151+
@Test
152+
public void testGetStringArrayNonArrayProperty() {
153+
JsonObject json = new JsonObject();
154+
json.addProperty("items", 123);
155+
assertThat(GsonHelper.getStringArray(json, "items")).isNull();
156+
}
157+
158+
@Test
159+
public void testGetLongArrayNonArrayProperty() {
160+
JsonObject json = new JsonObject();
161+
json.addProperty("items", "not-an-array");
162+
assertThat(GsonHelper.getLongArray(json, "items")).isNull();
163+
}
139164
}

0 commit comments

Comments
 (0)