Retrofit 设置 baseUrl 的注意事项

特此记录:

问题:

/**
 * 上传图片的接口,由于只有一个请求头,没有其它参数,我就直接写的完整接口:https://***.com/api/member/uploadAvatar
 * baseUrl 必须以'/'结尾,否则会报错
 */
public static final String BASE_URL = "https://***.com/api/member/uploadAvatar/";


@Headers("token: 31b5f356e232acac6994df7")
@Multipart
@POST("/")    // 没有参数时,必须要有字符'/',否则会报错
Call<String> upload(@Part MultipartBody.Part part);


RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
TestService testService = new Retrofit.Builder()
                .baseUrl(BASE_URL) // 有文章说某种情况可以不设置,经验证,不设置会报错
                .addConverterFactory(ScalarsConverterFactory.create())
                .build().create(TestService.class);
Call<String> upload = testService.upload(body);
upload.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {}

    @Override
    public void onFailure(Call<String> call, Throwable t) {}
});

在onResponse里打印居然出现了诡异H5代码,通过抓包发现图片是有上传的,不过中间发生了 Response Code:302

然后开始了纠结的排错流程:

Postman 调试接口 -- 无异常

直接使用Okhttp上传图片 -- 无异常

。。。。。。_(°:з」∠)_

最终发现异常请求的URL只有一部分,即:https://***.com/
而正常请求的URL是:https://***.com/api/member/uploadAvatar

解决:经过验证,确认是 baseUrl 的设置有问题,一共发现三种可行的设置方式

第一种:

public static final String BASE_URL = "https://***.com/";

@Headers("token: 31b5f356e232acac6994df7")
@Multipart
@POST("api/member/uploadAvatar")
Call<String> upload(@Part MultipartBody.Part part);


第二种:

public static final String BASE_URL = "https://***.com/api/member/";

@Headers("token: 31b5f356e232acac6994df7")
@Multipart
@POST("uploadAvatar")
Call<String> upload(@Part MultipartBody.Part part);


第三种:

public static final String BASE_URL = "https://***.com/api/member/uploadAvatar/";

@Headers("token: 31b5f356e232acac6994df7")
@Multipart
@POST(BASE_URL)
Call<String> upload(@Part MultipartBody.Part part);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值