diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java index 0d807402ac..84ebffe72f 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java @@ -108,7 +108,7 @@ public static float getAsPrimitiveFloat(JsonElement element) { } public static Integer[] getIntArray(JsonObject o, String string) { - JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string)); + JsonArray jsonArray = getAsJsonArray(o.get(string)); if (jsonArray == null) { return null; } @@ -122,7 +122,7 @@ public static Integer[] getIntArray(JsonObject o, String string) { } public static String[] getStringArray(JsonObject o, String string) { - JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string)); + JsonArray jsonArray = getAsJsonArray(o.get(string)); if (jsonArray == null) { return null; } @@ -136,7 +136,7 @@ public static String[] getStringArray(JsonObject o, String string) { } public static Long[] getLongArray(JsonObject o, String string) { - JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string)); + JsonArray jsonArray = getAsJsonArray(o.get(string)); if (jsonArray == null) { return null; } @@ -150,7 +150,7 @@ public static Long[] getLongArray(JsonObject o, String string) { } public static JsonArray getAsJsonArray(JsonElement element) { - return element == null ? null : element.getAsJsonArray(); + return (element == null || !element.isJsonArray()) ? null : element.getAsJsonArray(); } /** diff --git a/weixin-java-common/src/test/java/me/chanjar/weixin/common/util/json/GsonHelperTest.java b/weixin-java-common/src/test/java/me/chanjar/weixin/common/util/json/GsonHelperTest.java index bafe3c30d1..775ac2207b 100644 --- a/weixin-java-common/src/test/java/me/chanjar/weixin/common/util/json/GsonHelperTest.java +++ b/weixin-java-common/src/test/java/me/chanjar/weixin/common/util/json/GsonHelperTest.java @@ -136,4 +136,29 @@ public void testBuildSimpleJsonObject() { System.out.println(GsonHelper.buildJsonObject(1, true, "jsonElement", new JsonObject())); System.out.println(GsonHelper.buildJsonObject("num", 2, "string", "cde", "char", 'a', "bool", true)); } + + /** + * If the JSON property exists but is NOT a JSON array (e.g. a plain string), + * getIntArray should return null gracefully rather than throwing ClassCastException. + */ + @Test + public void testGetIntArrayNonArrayProperty() { + JsonObject json = new JsonObject(); + json.addProperty("items", "not-an-array"); + assertThat(GsonHelper.getIntArray(json, "items")).isNull(); + } + + @Test + public void testGetStringArrayNonArrayProperty() { + JsonObject json = new JsonObject(); + json.addProperty("items", 123); + assertThat(GsonHelper.getStringArray(json, "items")).isNull(); + } + + @Test + public void testGetLongArrayNonArrayProperty() { + JsonObject json = new JsonObject(); + json.addProperty("items", "not-an-array"); + assertThat(GsonHelper.getLongArray(json, "items")).isNull(); + } }