Retrofit Post 多部分表单数据值为空

Retrofit Post Multipart form data values are empty

我正在尝试通过 Android 中的 Retrofit post 一些多部分表单数据到 Web 服务。 Web 服务的 API 希望将以下参数作为多部分表单数据的字段传递:

Name         Type
company_id   text/plain
image        image/*

它还需要授权令牌作为查询字符串参数传递。

所以我定义了我的 API 接口调用,如下所示:

@Multipart
@POST("/companies/uploadImage")
@Headers({
"Content-Type: multipart/form-data",
"Accept: application/json"
})
Call<ServerResponse> companyUploadImage( @Part("company_id") RequestBody companyId, @Part MultipartBody.Part file, @Query("token") String token);

之后这就是我在自定义 class:

中调用上述 API 接口方法的方式
RequestBody companyId = RequestBody.create(MediaType.parse("text/plain"), LocalStorage.getInstance().getCompanyId());
File file = new File(postPath);

MultipartBody.Part image = MultipartBody.Part.createFormData("image", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));
                                       
Call<ServerResponse> uploadProfileImage = router.companyUploadImage(companyId, image, token);

uploadProfileImage.enqueue(new Callback<ServerResponse>() {
  @Override
  public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {

       Log.e("Upload Profile Image: ", response.body().getMessage());
}

@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
       Log.e("Upload Profile Image Error: ", t.getMessage());
  }
});

请求已成功发送到服务器,因此没有出现网络异常,但是在服务器端接收到的多部分表单值company_id和图像为空

有什么想法吗? 谢谢!

我设法解决了这个问题。看起来解决方案就像从 API 接口方法中删除 @Header 注释一样简单。所以现在看起来像这样:

@Multipart
@POST("/companies/uploadImage")
Call<ServerResponse> companyUploadImage( @Part("company_id") RequestBody companyId, @Part MultipartBody.Part file, @Query("token") String token);

也许有人会觉得这 post 有帮助。