android - 使用 Moshi & Retrofit 将响应包装在另一个对象中
问题描述
我正在使用 Moshi (with Retrofit) 将 JSON 映射到对象
我有这样的回应:
{
"email:"test@gmail.com"
"name":"test"
}
我的改造界面是这样的:
@POST("login")
suspend fun login(@Body request: LoginRequest): UserDTO
因此,从服务器返回的 JSON 代表一个 User dto。
事情是这样的:我不喜欢服务器有时会直接将某些对象作为 dto 返回,而有时则不会。
所以我想做的是始终拥有一个Response
包含 dto 对象的对象(在本例中为 LoginResponse)
如何将直接返回的 dto 包装在响应对象中?我在想有某种 Root 注释,但不幸的是它不是那么简单,我以前从未使用过 Moshi
解决方案
似乎正在处理这个:
首先我写了一个注释:
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class RootUserDTO
然后我注释了我的 Api 接口:
@POST("login")
@RootUserDTO
suspend fun login(@Body request: LoginRequest): LoginResponse
最后我写了一个自定义适配器:
class RootUserDTOAdapter {
@RootUserDTO
@FromJson
fun fromJson(userDTO: UserDTO): LoginResponse {
return LoginResponse(userDTO)
}
@ToJson
fun toJson(@RootUserDTO loginResponse: LoginResponse): UserDTO {
throw UnsupportedOperationException()
}
}
推荐阅读
- java - android studio 中没有显示错误,但 setOnClickListener 仅在一个按钮上有效,而在另一个按钮上无效
- angular - 如何使用多个角度版本?
- typescript - 如何过滤具有另一个数组中的值的数组?
- python - Pandas 将 dicts 列表附加到由 df1.apply 函数产生的 df2
- unix - 如何检索在不同脚本中运行的脚本的进程 ID
- c++ - 需要帮助查找死细胞数据*生命游戏* [已解决]
- python - Python Selenium:无法点击href
- angular - 接收 Angular Firebase 文档并返回
- r - 使用 fir {seewave} 选择音频文件的频率范围
- docker - 使用 v8 编译的 Docker 镜像达到了将近 5GB。我究竟做错了什么?