我有一个后端服务器,它的工作原理是这样的
"api/videos?search_object={"cat_id" :2, "channel_id" : 3, etc}
基本上,你可以给予一个搜索对象,它会根据该对象过滤列表。
@GET("videos")
Call<VideoListResponse> listVideos(@Query("search_object") VideoSearchObject videoSearchObject);
但是上面的代码不起作用,我可以先把VideoSearchModel转换成JSON字符串,这样把它传递给改造
@GET("videos")
Call<VideoListResponse> listVideos(@Query("search_object") String jsonString);
我想知道是否有更好更清楚的方法?任何建议将不胜感激。
3条答案
按热度按时间xiozqbni1#
Retrofit 2支持它,你所要做的就是用
stringConverter()
方法重写实现一个自定义的转换器工厂。请考虑以下具有自定义注解的Retrofit友好界面:
第一个
注解用于表示必须转换为字符串的参数。
模拟
OkHttpClient
,使其始终以“HTTP 200 OK”响应并转储请求URL:第一个
要对其进行测试,只需调用服务接口方法:
结果:
这是一个很好的例子,你可以用它来解释一下。
其中,
X
参数自变量是{"k1":"v1","k2":"v2"}
的编码表示形式。enxuqcxy2#
你可以试试下面的代码,它对我很有效
ttygqcqt3#
基本上,您可以给予搜索对象
不,你不给予一个对象作为输入。你提供了多个参数在
{ }
中,这样它 * 看起来 * 像一个对象(JavaScript对象,而不是Java对象)。实际上它只是一个字符串。构造的url只是一堆字符,url中没有“对象”这样的东西。
继续像
@Query("search_object") String jsonString
那样做。尽管你可能也想把参数从jsonString
重命名为searchString
,因为它就是searchString
。它不是JSON字符串。JSON字符串会像\"
那样对所有"
字符转义。