gson 如何在Retrofit GET请求中发送对象参数?

frebpwbc  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(297)

我有一个后端服务器,它的工作原理是这样的

"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);

我想知道是否有更好更清楚的方法?任何建议将不胜感激。

xiozqbni

xiozqbni1#

Retrofit 2支持它,你所要做的就是用stringConverter()方法重写实现一个自定义的转换器工厂。
请考虑以下具有自定义注解的Retrofit友好界面:
第一个
注解用于表示必须转换为字符串的参数。
模拟OkHttpClient,使其始终以“HTTP 200 OK”响应并转储请求URL:
第一个
要对其进行测试,只需调用服务接口方法:

final IService service = retrofit.create(IService.class);
service.get(ImmutableMap.of("k1", "v1", "k2", "v2")).execute();

结果:
这是一个很好的例子,你可以用它来解释一下。
其中,X参数自变量是{"k1":"v1","k2":"v2"}的编码表示形式。

enxuqcxy

enxuqcxy2#

你可以试试下面的代码,它对我很有效

@GET("api")
Call<Response> method(@Query("") JSONObject param);

Map<String, String> map = new HashMap<>();
map.put("key", "value");
JSONObject json = new JSONObject(map);
ttygqcqt

ttygqcqt3#

"api/videos?search_object={"cat_id" :2, "channel_id" : 3, etc}

基本上,您可以给予搜索对象
不,你不给予一个对象作为输入。你提供了多个参数在{ }中,这样它 * 看起来 * 像一个对象(JavaScript对象,而不是Java对象)。实际上它只是一个字符串。
构造的url只是一堆字符,url中没有“对象”这样的东西。
继续像@Query("search_object") String jsonString那样做。尽管你可能也想把参数从jsonString重命名为searchString,因为它就是searchString。它不是JSON字符串。JSON字符串会像\"那样对所有"字符转义。

相关问题