Flutter中使用Retrofit如何调用带多排序参数的API?
遇到这种多排序键的API调整很常见,我来帮你改一下代码适配新的需求。
首先,你的API现在要求多个sort查询参数,每个参数值是字段名,排序方向的格式(比如sort=startTime,desc),而你原来的代码把排序字段和方向拆成了两个独立参数,这显然和新的API格式不匹配了。
直接改造你的Retrofit接口方法就行,步骤如下:
- 把原来的
@Query("sort") String sort和@Query("desc") String desc这两个参数删掉,换成一个接收排序规则列表的参数@Query("sort") List<String> sortList。Retrofit for Dart会自动把这个列表展开成多个sort=xxx的查询参数,正好符合你给出的URL示例格式。
修改后的接口代码应该是这样:
@GET('contents') Future<HttpResponse<ContentList>> getContents( @Query("page") int page, @Query("size") int size, @Query("sort") List<String> sortList, );
调用的时候,只需要把所有排序规则以"字段名,方向"的字符串形式放进列表里就行,比如你需要按startTime降序、id降序排序:
final response = await yourApiInstance.getContents( page: 0, size: 20, sortList: ["startTime,desc", "id,desc"], );
这样生成的URL就会是https://example.com/contents?page=0&size=20&sort=startTime,desc&sort=id,desc,完全符合API的新要求。如果之后需要调整排序规则,只要修改列表里的元素就行,非常灵活。
内容的提问来源于stack exchange,提问作者Rokon
相关产品推荐
相关产品推荐

