在最近的一个项目中,我使用 Kotlin 和 Retrofit 开发了一个 Android 客户端,与使用 Spring Boot 构建的微服务进行通信,该微服务通过 JDBC 连接到 MS SQL Server 数据库。客户端将令牌和 bodyRequest 作为输入参数发送到 POST API,并期望接收由两个字符串 (String) 和一个整数 (Int) 组成的对象。当使用 Postman 测试 API 时,我能够得到预期的响应,其中包括两个字符串和一个整数。然而,当我在 Android 客户端中实现相同的 API 调用时,响应从未进入 onSuccess 块,而是始终落入 onFailure 块。
{
"codigoRespuesta":"00",
"mensajeRespuesta":"CORRECTO",
"idTransaccion":2371623456182
}
data class Response(
@serializedName("codigoRespuesta") val codigoRespuesta: String,
@serializedName("mensajeRespuesta") val mensajeRespuesta: String,
@serializedName("idTransaccion") val idTransaccion: Int
)
经过广泛调查,我发现问题是由于使用的数据类型造成的。在 Kotlin 中,Int 类型有 32 位限制,最多可以表示 2,147,483,647(10 位数字)的值。然而,从服务器收到的整数有 13 位,超出了这个限制。
修复
我将响应类中的数据类型从 Int 更改为 Long(最多支持 64 位)。这解决了问题,客户端开始成功处理响应。