返回翻新的原始响应作为json对象,而不转换为任何特定类型的对象?

时间:2019-07-02 09:11:22

标签: java kotlin retrofit2

我在项目中使用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)

有什么可能吗?

1 个答案:

答案 0 :(得分:0)

免责声明:我不了解Kotlin,仅提供Java术语作为答案。我建议您对第三方进行自己的http调用,并从中检索原始响应。然后,您可以从InputStream中读取响应,甚至可以将其读取为字节数组,也可以根据需要进行处理。您将牺牲开发时间和开发简单性,但会获得极大的灵活性。
但是,您不必编写自己的Http请求处理程序。以下是一些已知的第三方Http客户端:

  1. Apache Http Client
  2. OK Http client
  3. 还有我最喜欢的(同样是免责声明:由我撰写)MgntUtils HttpClient:JavadocMaven artifactsGithub,其中包含库,源代码和javadoc。

MgntUtils Http客户端可能以String(sendHttpRequest())甚至二进制信息(sendHttpRequestForBinaryResponse())的形式返回响应