【发布时间】:2021-08-28 22:46:28
【问题描述】:
如何使用这样的查询参数发送 GET 请求? key1=["S","I","D"]&key2=[["A","X",0],["X","Y","Z"]]
【问题讨论】:
如何使用这样的查询参数发送 GET 请求? key1=["S","I","D"]&key2=[["A","X",0],["X","Y","Z"]]
【问题讨论】:
根据retrofit java documents,你可以这样做。
使用 Retrofit.stringConverter(Type, Annotation[]) (或 Object.toString(),如果没有安装匹配的字符串转换器)将值转换为字符串,然后进行 URL 编码。空值被忽略。传递 List 或数组将为每个非空项生成一个查询参数。
Array/Varargs Example:
@GET("/friends")
Call<ResponseBody> friends(@Query("group") String... groups);
Calling with foo.friends("coworker", "bowling") yields /friends??> group=coworker&group=bowling.
所以你可以做这样的事情
@GET("/something")
Call<ResponseBody> getSomething(@Query("key1") String[] key1,
Query("key2") String[] key2 );
foo.getSomething(key1, key2)
更新 - 以上是查询具有多个值的参数的标准方法
为了将数组作为字符串发送,你可以像下面那样做
默认情况下,参数名称和值是 URL 编码的。指定 encoded=true 以更改此行为。
@GET("/something")
Call<ResponseBody> getSomething(@Query(value="key1", encoded=true) String key1);
Calling with foo.getSomething("['S','I','D']")) yields /something?key1=['S','I','D'].
【讨论】:
由于改造无法识别您的自定义数组类型,您必须考虑参数类型String,然后在传递给改造方法之前构建您的参数,如"["S","I","D"]"。
例如创建你的参数:
String parameter = "["
int arraySize = array.size()
for(int i = 0; i < arraySize; i++) {
parameter += "\"" + array.get(i) + "\"";
if(i != arraySize - 1) {//Append ',' except last element
parameter += ",";
}
}
parameter += "]";
具有“S”、“I”和“D”元素的数组的输出是["S","I","D"] String。
现在您可以将其作为改造参数传递。
【讨论】: