问题
I'm looking for way to add an int array (e.g [0,1,3,5]) as parameter in a GET request with retrofit 2. Then, the generated url should be like this : http://server/service?array=[0,1,3,5]
How to do this ?
回答1:
Just add it as a query param
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") List<Integer> array);
You can also use int[], or Integer... as a last param;
回答2:
I have finally founded a solution by using Arrays.toString(int []) method and by removing spaces in this result because Arrays.toString return "[0, 1, 3, 5]". And my request method looks like this
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") String array);
回答3:
I faced a similar problem and had to do a couple of things to reach the acceptable form (as asked in the question).
Converted an ArrayList to String
arrayList.toString().replace(" ", "")
In RetroFit method, I changed the Query param which accepts the ArrayList above to as follows:
@Query(value = "cities", encoded = true)
This ensures that the brackets and commas are not URL encoded.
回答4:
Using toString
didn't work for me.
Instead, TextUtils.join(",", ids)
does the trick.
Don't forget to mark the Query
with encoded = true
.
回答5:
You need to name your query param with an array syntax like so:
@GET("http://server/service")
Observable<Void> getSomething(@Query("array[]") List<Integer> array);
The syntax itself will vary by the backend technology being used, however not including the brackets "[]" will normally be interpreted as a single value.
For example, using array=1&array=2
will generally be interpreted by backends as only array=1
or array=2
instead of array=[1,2]
.
来源:https://stackoverflow.com/questions/41590454/add-an-array-as-request-parameter-with-retrofit-2