From 8a3f4a2113c2c46f85b19cc75a370a468fb7738d Mon Sep 17 00:00:00 2001 From: jujonghun <85150438+wn1331@users.noreply.github.com> Date: Wed, 11 Nov 2026 11:15:07 +0900 Subject: [PATCH] fix(model): deserialize camelCase Slack Lists link fields Fixes #1679 --- .../json/GsonListRecordLinkFieldTest.java | 51 +++++++++++++++++++ .../com/slack/api/model/list/ListRecord.java | 6 +-- 2 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 slack-api-client/src/test/java/test_locally/api/util/json/GsonListRecordLinkFieldTest.java diff --git a/slack-api-client/src/test/java/test_locally/api/util/json/GsonListRecordLinkFieldTest.java b/slack-api-client/src/test/java/test_locally/api/util/json/GsonListRecordLinkFieldTest.java new file mode 100644 index 000000000..f0ae28228 --- /dev/null +++ b/slack-api-client/src/test/java/test_locally/api/util/json/GsonListRecordLinkFieldTest.java @@ -0,0 +1,51 @@ +package test_locally.api.util.json; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.model.list.ListRecord; +import com.slack.api.util.json.GsonFactory; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class GsonListRecordLinkFieldTest { + + private final Gson gson = GsonFactory.createSnakeCase(); + + @Test + public void deserializeCamelCaseLinkField() { + String json = "{\"ok\":true,\"items\":[{\"fields\":[{" + + "\"link\":[{" + + "\"originalUrl\":\"https://github.com/org/repo/pull/7\"," + + "\"displayAsUrl\":false," + + "\"displayName\":\"repo#7\"" + + "}]}]}]}"; + + SlackListsItemsListResponse response = gson.fromJson(json, SlackListsItemsListResponse.class); + ListRecord.LinkField linkField = response.getItems().get(0).getFields().get(0).getLink().get(0); + + assertThat(linkField.getOriginalUrl(), is("https://github.com/org/repo/pull/7")); + assertThat(linkField.getDisplayAsUrl(), is(false)); + assertThat(linkField.getDisplayName(), is("repo#7")); + } + + @Test + public void serializeLinkFieldAsSnakeCase() { + ListRecord.LinkField linkField = ListRecord.LinkField.builder() + .originalUrl("https://github.com/org/repo/pull/7") + .displayAsUrl(false) + .displayName("repo#7") + .build(); + + JsonObject json = gson.toJsonTree(linkField).getAsJsonObject(); + + assertThat(json.get("original_url").getAsString(), is("https://github.com/org/repo/pull/7")); + assertThat(json.get("display_as_url").getAsBoolean(), is(false)); + assertThat(json.get("display_name").getAsString(), is("repo#7")); + assertThat(json.has("originalUrl"), is(false)); + assertThat(json.has("displayAsUrl"), is(false)); + assertThat(json.has("displayName"), is(false)); + } +} diff --git a/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java b/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java index 951ac828d..5468d94f8 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java +++ b/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java @@ -87,11 +87,11 @@ public void setMessages(List messages) { @NoArgsConstructor @AllArgsConstructor public static class LinkField { - @SerializedName("original_url") + @SerializedName(value = "original_url", alternate = "originalUrl") private String originalUrl; - @SerializedName("display_as_url") + @SerializedName(value = "display_as_url", alternate = "displayAsUrl") private Boolean displayAsUrl; - @SerializedName("display_name") + @SerializedName(value = "display_name", alternate = "displayName") private String displayName; }