Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

ListRecord.Field array-shaped `message` still fails in the production GsonFactory (follow-up to #1587)

Aberta Para iniciantes
#1,653 2 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
74/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
java
Domínio
api

Direção de pesquisa

Comece com GsonFactory.registerTypeAdapters e GsonListViewGroupingFactory; a issue propõe mover GsonListRecordFieldFactory para slack-api-model/src/main/java/com/slack/api/util/json/ e registrá-lo na factory de produção. Confira o adaptador de teste existente e ListRecordFieldTest para verificar o tratamento esperado de objetos individuais e arrays. O trabalho estará concluído quando a GsonFactory de produção analisar as duas formas com sucesso.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Issue summary

When the Slack API returns a conversations.replies (or conversations.history) response that contains a Slack Lists item attachment, the SDK throws JsonSyntaxException whenever any ListRecord.Field.message value is a JSON array instead of a single object. The whole API call fails, and no Message data is returned.

This is the bug from #1587. #1590 (released in v1.49.0) closed #1587, but the bug is still in the production code path in v1.52.0.

Affected versions

  • v1.46.0 through v1.48.1 (verified in #1587; also seen in production on v1.48.1)
  • v1.49.0 through v1.52.0: the production GsonFactory has no adapter for ListRecord.Field. @maoppay saw the failure on v1.50.0 (comment in #1587), and the live probe in #1644 shows it too.

Why #1590 was not sufficient

#1590 changed two things:

  1. ListRecord.Field (slack-api-model/src/main). It added private transient List<Message> messages and getMessages() / setMessages(). The field message is still a single Message. Gson skips transient fields and sets fields by reflection, not through setters. So without an adapter, Gson still maps the JSON key message to the Message field, and an array still fails.
  2. GsonListRecordFieldFactory, the adapter that converts the array. #1590 put it in slack-api-model/src/test/java/test_locally/util/list/ and registered it only in the test GsonFactory (slack-api-model/src/test/java/test_locally/unit/GsonFactory.java).

ListRecordFieldTest parses with that test GsonFactory, so it passes. Real API calls parse with com.slack.api.util.json.GsonFactory in slack-api-client (MethodsClientImpl calls GsonFactory.createSnakeCase(config)), and that class does not register the adapter. Also, the json-logs/samples/api samples still have message as a single object, so the MockSlackApi tests (for example ConversationsTest) never see the array shape.

Minimal reproduction

import com.google.gson.Gson;
import com.slack.api.methods.response.conversations.ConversationsRepliesResponse;
import com.slack.api.util.json.GsonFactory;

public class Repro {
    public static void main(String[] args) {
        // Mirrors the shape Slack returns when a Lists item's `message` field
        // has multiple values (array form).
        String payload =
            "{\"ok\":true,\"messages\":[{\"type\":\"message\",\"user\":\"U1\",\"ts\":\"1.0\","
            + "\"text\":\"hi\",\"attachments\":[{\"list_record\":{\"record\":{\"fields\":["
            + "{\"key\":\"name\",\"message\":{\"text\":\"ok\"}},"
            + "{\"key\":\"details\",\"message\":[{\"text\":\"a\"},{\"text\":\"b\"}]}"
            + "]}}}]}]}";

        Gson sdkGson = GsonFactory.createSnakeCase();
        // Still throws JsonSyntaxException on v1.52.0 at
        // $.messages[0].attachments[0].list_record.record.fields[1].message
        ConversationsRepliesResponse parsed =
            sdkGson.fromJson(payload, ConversationsRepliesResponse.class);
    }
}

Expected behavior

The SDK accepts both single-object and array shapes for ListRecord.Field.message in real API responses, as getMessages() from #1590 intends.

Proposed fix

#1654 moves GsonListRecordFieldFactory to slack-api-model/src/main/java/com/slack/api/util/json/ (next to GsonListViewGroupingFactory) and registers it in GsonFactory.registerTypeAdapters.

Linguagem predominante
Java
Estrelas
602
Forks
236
Merge médio
1d 21h
PRs com merge (30d)
8

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de slackapi/java-slack-sdk

Todas as issues de slackapi/java-slack-sdk

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.