使用retrofit2.http链接路径不UrlEncode编码的方法

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

public @interface Url

试了下,有些参数少的。在提交时还可以 路径+?+key=value 就可以,不用特地写个map。

.

顺便记录一下,个别接口需要参数按顺序提交的,可以把HashMap改成LinkedHashMap

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。