From a6825a62bb4fa1d1e620969d81002fc77b271b56 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 4 Oct 2025 01:39:35 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3628=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3=E9=87=8D=E7=BD=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9B=B4=E5=B1=9E=E9=A2=86=E5=AF=BC=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/util/json/WxCpUserGsonAdapter.java | 7 ++++- .../cp/util/json/WxCpUserGsonAdapterTest.java | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java index 0da35ff7f..1df32b860 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java @@ -281,7 +281,12 @@ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSeri } addProperty(o, MAIN_DEPARTMENT, user.getMainDepartment()); - addArrayProperty(o, DIRECT_LEADER, user.getDirectLeader()); + // Special handling for directLeader: include empty arrays to support WeChat Work API reset functionality + if (user.getDirectLeader() != null) { + JsonArray directLeaderArray = new JsonArray(); + Arrays.stream(user.getDirectLeader()).forEach(directLeaderArray::add); + o.add(DIRECT_LEADER, directLeaderArray); + } if (!user.getExtAttrs().isEmpty()) { JsonArray attrsJsonArray = new JsonArray(); diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java index 9b62a8d58..66be5c66a 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java @@ -180,4 +180,31 @@ public class WxCpUserGsonAdapterTest { "{\"type\":2,\"name\":\"测试app\"," + "\"miniprogram\":{\"appid\":\"wx8bd80126147df384\",\"pagepath\":\"/index\",\"title\":\"my miniprogram\"}}]}}"); } + + /** + * Test directLeader empty array serialization. + * This test verifies that empty directLeader arrays are included in JSON as "direct_leader":[] + * instead of being omitted, which is required for WeChat Work API to reset user direct leaders. + */ + @Test + public void testDirectLeaderEmptyArraySerialization() { + WxCpUser user = new WxCpUser(); + user.setUserId("testuser"); + user.setName("Test User"); + + // Test with empty array - should be serialized as "direct_leader":[] + user.setDirectLeader(new String[]{}); + String json = user.toJson(); + assertThat(json).contains("\"direct_leader\":[]"); + + // Test with null - should not include direct_leader field + user.setDirectLeader(null); + json = user.toJson(); + assertThat(json).doesNotContain("direct_leader"); + + // Test with non-empty array - should be serialized normally + user.setDirectLeader(new String[]{"leader1", "leader2"}); + json = user.toJson(); + assertThat(json).contains("\"direct_leader\":[\"leader1\",\"leader2\"]"); + } }