Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto Apto para principiantes
#1,653 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
java
Área
api

Línea de trabajo

Empieza con GsonFactory.registerTypeAdapters y GsonListViewGroupingFactory; el issue propone mover GsonListRecordFieldFactory a slack-api-model/src/main/java/com/slack/api/util/json/ y registrarlo en la factoría de producción. Comprueba el adaptador de prueba existente y ListRecordFieldTest para ver el comportamiento esperado con objetos individuales y arrays. Se considera terminado cuando la GsonFactory de producción analiza correctamente ambas formas.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Java
Estrellas
602
Forks
235
Merge medio
2 d 13 h
PR fusionados (30 d)
8

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de slackapi/java-slack-sdk

Todos los issues de slackapi/java-slack-sdk

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.