我在项目中使用Kotlin进行了翻新。
我基本上是在尝试做一些非常简单的事情。
有一个方法,调用改造接口,该接口将从另一个API中获取信息。不幸的是,该API从同一端点响应不同类型的对象(取决于输入和结果),因此,我能够映射响应并正常工作。
现在,我正尝试避免映射到特定模型,而只是返回原始响应,并将其作为Json输出输出到我的服务上。
所以我做到了:
为我服务
val response = userService.getUser(request).await()
UserService:
fun getUser(request: User) = client.getInfo(// some parameters )
然后在我的客户(改型)上,我做到了:
@GET("/api/v1/user/{}")
fun getInfo( // some paramters
): Deferred<ResponseBody>
每次我使用ResponseBody时,都会得到一个空结果
每次我使用Deferred<Response<MySpecificObject>>
我得到了一个完整的信息对象。我现在想避免这种情况。
我的改装配置如下:
return Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(CoroutineCallAdapterFactory()) .addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
.create()
在我的dropwizard配置中,我添加了以下内容:
bootstrap.objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
bootstrap.objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
有什么可能吗?
答案 0 :(得分:0)
免责声明:我不了解Kotlin,仅提供Java术语作为答案。我建议您对第三方进行自己的http调用,并从中检索原始响应。然后,您可以从InputStream
中读取响应,甚至可以将其读取为字节数组,也可以根据需要进行处理。您将牺牲开发时间和开发简单性,但会获得极大的灵活性。
但是,您不必编写自己的Http请求处理程序。以下是一些已知的第三方Http客户端:
MgntUtils Http客户端可能以String(sendHttpRequest()
)甚至二进制信息(sendHttpRequestForBinaryResponse()
)的形式返回响应