如何使用Retrofit来传递Authorization Bearer?

Sun*_*l P 6 android authorization bearer-token retrofit2

在这里,我需要通过授权承载来获取服务器的响应,以防将文件上传到我正在使用改造的服务器。

我尝试了两种方式

1)

这就是我在改造接口类中初始化的方式

@POST("document/kycDocument/user/3")
Call<UploadKycpojo> uploadkycdoc(@Header("Authorization")String token, @Body UploadKycRequest uploadKycRequest); 
Run Code Online (Sandbox Code Playgroud)

这就是我从接口类调用它的方式

Call<UploadKycpojo> request = RestClient.getInstance(UploadIdActivtiy.this).get().uploadkycdoc("Bearer "+auth,uploadKycRequest);
Run Code Online (Sandbox Code Playgroud)

2)

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
      @Override
      public Response intercept(Chain chain) throws IOException {
        Request newRequest  = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer " + token)
            .build();
        return chain.proceed(newRequest);
      }
    }).build();

Retrofit retrofit = new Retrofit.Builder()
    .client(client)
    .baseUrl(/** your url **/)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。提前致谢!

Vis*_*hel 3

我确实尝试过,它对我有用,请参考下面的代码:

@Multipart
@POST("document/kycDocument/user/3")
Call<UploadKycpojo> uploadkycdoc(@Header("Authorization")String token, @Part 
MultipartBody.Part file, @PartMap() Map<String,
        RequestBody> partMap);
Run Code Online (Sandbox Code Playgroud)

对于 API 调用,请使用以下方法:

private void uploadkycdoc() {
MultipartBody.Part filePart;
    HashMap<String, RequestBody> requestBodyMap = new HashMap<>();
    requestBodyMap.put("imageSlide", RequestBody.create(MediaType.parse("multipart/form-data"), "front"));

    ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);
    Call<UploadKycpojo> uploadkycdocCall = null;

    File file = new File(getRealPathFromURI(fileUri, context));
    RequestBody requestFile = RequestBody.create(MediaType.parse("*/*"), file);
    filePart= MultipartBody.Part.createFormData("file", file.getName(),
            requestFile);

    uploadkycdocCall = apiInterface.uploadkycdoc("Bearer " + token, filePart, requestBodyMap);

    uploadkycdocCall.enqueue(new Callback<UploadKycpojo>() {
        @Override
        public void onResponse(Call<UploadKycpojo> call, Response<UploadKycpojo> response) {
            cancelProgressDialog();
            try {
                if (response.isSuccessful()) {

                } else {

                }
            } catch (Exception e) {

            }
        }

        @Override
        public void onFailure(Call<UploadKycpojo> call, Throwable t) {

        }
    });
}
Run Code Online (Sandbox Code Playgroud)