当前位置: 首页 > 知识库问答 >
问题:

无法使用改版2.6.1成功发送POST请求-JSON转换器的问题

姜煌
2023-03-14

我正在使用新的treverfit2与挂起的coroutines,与GET请求一切工作良好。

此操作正常,并返回以下响应:{“errors”:false,“success”:true}%

下面是我的请求在我的Api类中的样子:

    @Headers( "Content-Type: application/json" )
    @POST("/tokens?type=56427890283537921")
    suspend fun sendFirebaseToken(@Body tokenRequest: RequestBody) : Call<TokenResponse>

这是我的TokenResponse类:

@JsonClass(generateAdapter = true)
data class TokenResponse(
    @Json(name="errors")
    val errors: Boolean,
    @Json(name="success")
    val success: Boolean)
object ApiClient {

    private const val BASE_URL = "https://myExampleUrl.com"
    private var retrofit: Retrofit? = null

    var moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
    val client: Retrofit?
        get() {
            if (retrofit == null) {
                retrofit = Retrofit.Builder().baseUrl(
                    BASE_URL
                ).client(getOkHttpClient())
                    .addConverterFactory(MoshiConverterFactory.create())
                    .build()
            }
            return retrofit
        }

    fun getOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder().addInterceptor(getLoggingInterceptor())
            .connectTimeout(120, TimeUnit.SECONDS)
            .readTimeout(120, TimeUnit.SECONDS).writeTimeout(90, TimeUnit.SECONDS).build()
    }

    private fun getLoggingInterceptor(): HttpLoggingInterceptor {
        return HttpLoggingInterceptor().setLevel(
            if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.HEADERS
            else HttpLoggingInterceptor.Level.NONE
        )
    }
}

无论如何:我需要返回值,所以我返回call 。这让我想到了我无法解决的主要问题:如果现在我执行代码,它会随着以下日志崩溃:

java.lang.IllegalArgumentException: Unable to create converter for     retrofit2.Call<myapp.communication.TokenResponse>
        for method TokenApi.sendToken
        at retrofit2.Utils.methodError(Utils.java:52)

为了尝试处理这个问题,我使用moshi-kotlin-codegen生成适当的适配器(因此在data类中生成注释),但没有用。类已生成,但未使用。我试着将一个带有JsonAdapterFactory的Moshi传递给我的ConverterFactory(如var Moshi=Moshi.builder().add(KotlinJsonAdapterFactory()).build(),但这也不起作用。尝试将生成的适配器随意添加到moshi中,但也不起作用。

我还尝试在请求中返回不同的类型。改型文档声明,如果没有转换器,只能返回responsebody,但同样的结果是:改型抱怨它没有转换器。返回调用 的情况相同

我觉得我错过了什么?谁能帮忙?很高兴提供更多的细节,请请求什么是需要的。

共有1个答案

督阿苏
2023-03-14

您的请求函数应该如下所示。

@Headers( "Content-Type: application/json" )
@POST("/tokens?type=56427890283537921")
suspend fun sendFirebaseToken(@Body tokenRequest: RequestBody): TokenResponse

您不使用调用<...>,因为您已将其标记为挂起。

 类似资料:
  • 这是我的控制器: 这是我的配置: 这是类别类: 如果我尝试发送内容类型为application/json和以下正文的post请求: {“id”:8,“title”:“Паа”、“engTitle”:“Pizza”、“description”:null,“menuItems”:[{“id”:4,“title”:“Паааааааааааа”和“engTitle”:“Pepperoni”、“price

  • 如果你还需要什么,请告诉我,希望有人能帮助我。 EDIT第一次没有提到它,但我的JSON不会总是使用相同的键(id、nom、slug)。

  • 我有一个对象,作为另一个GET请求的响应接收它<代码>jsonElement。toString() 看起来像JSON数组: 我需要通过另一个使用改装的POST请求发送此字符串。如何通过POST请求发送jsonElement或String对象?我的方法声明应该怎么看?例如:

  • 我正试图根据以下代码发出post请求: 在Postman,此请求工作正常,不需要身份验证,无需登录名、密码或令牌即可工作。但是,上面的代码不起作用。 日志控制台的一部分如下: 我无法粘贴整个stacktrace,因为stackoverflow平台不允许。

  • 问题内容: 我正在使用Retrofit集成我的Web服务,但我不明白如何使用POST请求将JSON对象发送到服务器。我目前陷入困境,这是我的代码: 活动:- PostInterface:- 要求JSON:- 响应JSON:- 问题答案: 在gradle中使用这些 使用这两个POJO类........ LoginData.class LoginResult.class 像这样使用API 使用这样的呼

  • 问题内容: 有人知道使用JSON 的正确方法吗? 我从服务器收到响应。它可以使用Chrome浏览器。 问题答案: 对于 Guzzle <= 4: 这是原始的发布请求,因此将JSON放入正文即可解决问题