【发布时间】:2021-06-17 23:50:40
【问题描述】:
我需要传递Map<String, Any> 作为 PUT 请求的参数。 Json(由 Map 制成)如下所示:
{
"user": {
"lastname": "Smith",
"name": "John",
...
},
"foreign_language_keys": [
"eng",
"fr"
],
"tachograph_cards": [
{
"tachograph_key": "estr",
"tachograph_card_num":
.....
如果我将 Map<String, String> 作为参数传递 - 它工作正常:
@FormUrlEncoded
@Headers("Content-Type: application/json")
@PUT("api/authorization/user/driver/{user_id}")
fun editUser(@Path("user_id") userId: String, @FieldMap body: Map<String, String>): Single<UserModel>
但如果我需要将 Map<String, Any> 作为参数传递 - 我会收到运行时错误“java.lang.IllegalArgumentException: Parameter type must not include a type variable or wildcard: java.util.Map (parameter #2)”
添加 @JvmSuppressWildcards 注释 (@FieldMap body: Map<String, @JvmSuppressWildcards Any>)) 没有帮助(我从服务器收到另一个错误“未定义索引”,用于 Json 中的一个必要字段,因为服务器在我的请求中看不到此字段)。
可行的解决方案是通过映射我模型中的所有字段(而不是传递Map<String, Any>)来制作com.google.gson.JsonObject,但这太难了。我确信它必须在不将我的模型转换为 Json 的情况下工作,但我找不到简单的解决方案。
有人可以帮忙吗?
【问题讨论】: