Retrofit2中使用GET请求如何传递查询参数?
Retrofit GET请求传递查询参数的几种方法
嘿,我来帮你搞定Retrofit GET请求的查询参数传递问题!针对你给出的这个接口:
@GET("/datas/") Call<List> getDataInfo();
这里有几种常用且实用的方式,我给你一一拆解:
1. 单个参数用@Query注解
这是最直接的方式,你只需要在方法的参数列表里添加@Query("参数名")注解,Retrofit会自动把参数拼接到URL的查询串中。
比如你需要传递page(页码)和size(每页数量)两个参数,接口可以改成这样:
@GET("/datas/") Call<List<Data>> getDataInfo(@Query("page") int page, @Query("size") int size);
调用的时候直接传入对应的值就行,比如:
// 调用示例,请求URL会变成 /datas/?page=1&size=10 apiService.getDataInfo(1, 10).enqueue(new Callback<List<Data>>() { @Override public void onResponse(Call<List<Data>> call, Response<List<Data>> response) { // 处理成功响应 if (response.isSuccessful()) { List<Data> dataList = response.body(); // ... 你的业务逻辑 } } @Override public void onFailure(Call<List<Data>> call, Throwable t) { // 处理请求失败 t.printStackTrace(); } });
小提示:如果某个参数可能为空,可以把参数类型改成包装类(比如Integer代替int),当参数为null时,Retrofit会自动忽略这个参数,不会拼到URL里。
2. 多个/动态参数用@QueryMap注解
如果你的查询参数数量不确定,或者参数较多,用@QueryMap会更灵活。你可以把所有参数放到一个Map里,Retrofit会自动遍历Map把键值对拼到URL中。
修改后的接口:
@GET("/datas/") Call<List<Data>> getDataInfo(@QueryMap Map<String, Object> params);
调用时创建Map并放入参数:
Map<String, Object> params = new HashMap<>(); params.put("page", 1); params.put("size", 10); params.put("category", "tech"); // 额外的分类参数 apiService.getDataInfo(params).enqueue(new Callback<List<Data>>() { // 同上的响应处理逻辑 });
这样请求URL会变成/datas/?page=1&size=10&category=tech。
3. 特殊场景:编码参数
如果你的参数包含特殊字符(比如空格、中文),可以设置@Query的encoded属性为true,避免Retrofit自动重复编码:
@GET("/datas/") Call<List<Data>> getDataInfo(@Query("keyword") String keyword); // 默认会自动编码,比如传入"安卓开发"会变成"%E5%AE%89%E5%8D%93%E5%BC%80%E5%8F%91" // 如果已经手动编码过,就设置encoded=true: @GET("/datas/") Call<List<Data>> getDataInfo(@Query(value = "keyword", encoded = true) String encodedKeyword);
内容的提问来源于stack exchange,提问作者user11022957
相关产品推荐
相关产品推荐

