java - 将改造原始响应作为 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)
知道这是否可能吗?
解决方案
免责声明:我不了解 Kotlin,只用 Java 术语给出答案。我建议您对第三方进行自己的 http 调用并从中检索原始响应。然后,您可以根据InputStream
需要从字节数组中读取响应并对其进行任何操作。您将牺牲开发时间和开发简单性,但获得极大的灵活性。
但是,您不必编写自己的 Http 请求处理程序。以下是少数已知的第三方 Http 客户端:
- Apache Http 客户端,
- OK Http 客户端
- 还有我最喜欢的(再次声明:由我编写)MgntUtils HttpClient:Javadoc、Maven artifacts、Github以及库、源代码和 javadoc。
MgntUtils Http 客户端可能会以 String ( sendHttpRequest()
) 甚至二进制信息 ( sendHttpRequestForBinaryResponse()
)的形式返回响应
推荐阅读
- scala - Spark SQL中的'col(带勾号)表达式是什么意思?
- html - 社交媒体图标不是垂直对齐而不是水平对齐
- excel - VBA excel - 包含日期的单元格返回空值
- excel - 带有excel 2010的VB脚本
- javascript - 使用 import 和动态 import() 加载相同的模块
- ssms - SSMS:从自动刷新的其他表创建新表
- ruby-on-rails - 在 rspec 中运行时,isolate_namespace 错过 Rails::Engine::ActionDispatch
- java - 如何用接口方法的方法引用替换 lambda?
- c++ - 当实例变量未初始化时,如何使 C++ 编译器产生错误或警告?
- swift - setTitle 在 If 语句中不起作用(喜欢/不同功能)