我正在使用新的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
,但同样的结果是:改型抱怨它没有转换器。返回调用
的情况相同
我觉得我错过了什么?谁能帮忙?很高兴提供更多的细节,请请求什么是需要的。
您的请求函数应该如下所示。
@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放入正文即可解决问题