首页 > 解决方案 > 将改造原始响应作为 json 对象返回而不转换为任何特定类型的对象?

问题描述

我在我的项目中使用 Kotlin 进行改造。

我基本上是在尝试做一些非常简单的事情。

拥有一个方法,调用一个改造接口,该接口将从另一个 API 带来信息。不幸的是,该 API 响应来自同一端点的不同类型的对象(取决于输入和结果),因此,我能够映射响应并且工作正常。

现在我试图避免映射到特定模型,而是只返回原始响应并将其作为 Json 输出输出到我的服务上。

所以我做了这个:

为我服务

val response = userService.getUser(request).await()

用户服务:

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)

知道这是否可能吗?

标签: javakotlinretrofit2

解决方案


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

  1. Apache Http 客户端
  2. OK Http 客户端
  3. 还有我最喜欢的(再次声明:由我编写)MgntUtils HttpClient:JavadocMaven artifactsGithub以及库、源代码和 javadoc。

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


推荐阅读