2022-12-10 遇到的一点小问题
之前的网络请求方法是从网上找到,先设置baseUrl,然后设置路径和请求参数。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(StringConverterFactory.create())
.client(new OkHttpClient.Builder())
.build();
AppInterface app = retrofit.create(AppInterface.class);
Call<String> call = app.getInfo("python/test/", map);
call.enqueue(callback);
public interface AppInterface {
@GET("{param}")
Call<String> getInfo(@Path("param") String param, @QueryMap Map<String, String> map);
@GET("php/test")
Call<String> getInfo(@QueryMap Map<String, String> map);
}
不过最近有个接口遇到错误,才知道使用@Path()
去设置路径,会自动编码,比如“python/test/”会变成“python%2Ftest”。提前把路径写好,路径太多又很麻烦。
网上找了下,看到是时候客观评价Retrofit了,这几点你必须明白,找到了答案,记录一下。
public interface AppInterface {
@GET
Call<String> getInfo(@Url String url);
@GET
Call<String> getInfo(@Url String url, @QueryMap Map<String, String> map);
@POST
Call<String> postInfo(@Url String url, @Body RequestBody map);
}
不使用@Path()
,使用@Url
。
试了下,有些参数少的。在提交时还可以 路径+?+key=value 就可以,不用特地写个map。
.
顺便记录一下,个别接口需要参数按顺序提交的,可以把HashMap
改成LinkedHashMap
。