Skip to content

Commit a6825a6

Browse files
authored
🎨 #3628【企业微信】修复更新用户接口重置用户直属领导字段的问题
1 parent 9fd12b2 commit a6825a6

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,12 @@ public JsonElement serialize(WxCpUser user, Type typeOfSrc, JsonSerializationCon
281281
}
282282
addProperty(o, MAIN_DEPARTMENT, user.getMainDepartment());
283283

284-
addArrayProperty(o, DIRECT_LEADER, user.getDirectLeader());
284+
// Special handling for directLeader: include empty arrays to support WeChat Work API reset functionality
285+
if (user.getDirectLeader() != null) {
286+
JsonArray directLeaderArray = new JsonArray();
287+
Arrays.stream(user.getDirectLeader()).forEach(directLeaderArray::add);
288+
o.add(DIRECT_LEADER, directLeaderArray);
289+
}
285290

286291
if (!user.getExtAttrs().isEmpty()) {
287292
JsonArray attrsJsonArray = new JsonArray();

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,31 @@ public void testSerialize() {
180180
"{\"type\":2,\"name\":\"测试app\"," +
181181
"\"miniprogram\":{\"appid\":\"wx8bd80126147df384\",\"pagepath\":\"/index\",\"title\":\"my miniprogram\"}}]}}");
182182
}
183+
184+
/**
185+
* Test directLeader empty array serialization.
186+
* This test verifies that empty directLeader arrays are included in JSON as "direct_leader":[]
187+
* instead of being omitted, which is required for WeChat Work API to reset user direct leaders.
188+
*/
189+
@Test
190+
public void testDirectLeaderEmptyArraySerialization() {
191+
WxCpUser user = new WxCpUser();
192+
user.setUserId("testuser");
193+
user.setName("Test User");
194+
195+
// Test with empty array - should be serialized as "direct_leader":[]
196+
user.setDirectLeader(new String[]{});
197+
String json = user.toJson();
198+
assertThat(json).contains("\"direct_leader\":[]");
199+
200+
// Test with null - should not include direct_leader field
201+
user.setDirectLeader(null);
202+
json = user.toJson();
203+
assertThat(json).doesNotContain("direct_leader");
204+
205+
// Test with non-empty array - should be serialized normally
206+
user.setDirectLeader(new String[]{"leader1", "leader2"});
207+
json = user.toJson();
208+
assertThat(json).contains("\"direct_leader\":[\"leader1\",\"leader2\"]");
209+
}
183210
}

0 commit comments

Comments
 (0)