我需要传递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:参数类型不得包含类型变量或通配符:java.util.Map(参数#2)”
添加@JvmSuppressWildcards批注(@FieldMap body: Map<String, @JvmSuppressWildcards Any>)
)无济于事(由于Json中的必要字段之一,我从服务器收到另一个错误“ Undefined index”,因为服务器在我的请求中没有看到此字段。
有效的解决方案是通过映射模型中的所有字段(而不是传递Map<String, Any>
)来制作com.google.gson.JsonObject,但这太困难了。我确信它必须能够在不将模型转换为Json的情况下工作,但是我找不到简单的解决方案。任何人都可以帮忙吗?
您不能确定发布/放置Map<String, Any
是因为?是非法的论点。
您可以构造并发送Map<String, JsonObject>
,如果您使用Gson库,则创建JsonObject并不困难。您要做的只是提取字符串(Json对象的值部分)并将其提供给Gson库,然后它生成JsonObject模型供您传递。
或者您可以从解析端发送Map<String, String>
,将您的parse()
和stringify(
)设为Json值,