Retrofit上傳頭像並給該請求body新增引數---500 Internal Server Error
阿新 • • 發佈:2018-12-24
網路框架用的是retrofit,在引數配置方面,的確是行雲流水,屢試不爽······前提你很熟悉啊。
上傳頭像給後臺:
正常情況下(POST請求)
//接口裡正常定義
@Multipart
@POST("user/uploadAvatar")
Observable<DataString> uploadAvatar(@Part MultipartBody.Part photo);
//請求方法 public Observable<DataString> uploadAvatar(File file){ //設定Content-Type:application/octet-stream RequestBody photoRequestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); //設定Content-Disposition:form-data; name="photo"; filename="demo.png" MultipartBody.Part photo = MultipartBody.Part.createFormData("file", file.getName(), photoRequestBody); return service.uploadAvatar(photo); }
其中,MediaType.parse("application/octet-stream")
上傳型別根據後臺定製-----如果你有後臺配合的話。
像我現在,人家後臺介面一扔過來說了句,之前在網頁端都除錯過,如果不通,就看看之前h5是怎麼接入的······
現在的需求,除了上傳檔案外,還要攜帶引數:
網上上傳的方法,試了七七八八,光一個Observable<DataString> uploadAvatar(@PartMap Map<String, RequestBody> parm);
都反覆試了大半個小時–最後還是抱著試試的態度,介面處:
@Multipart @POST("user/uploadAvatar") Observable<DataString> uploadAvatar(@Part("userNo") RequestBody userNo, @Part MultipartBody.Part file);
這裡如果你用@Query("userNo")String userNo
該引數會直接新增到url路徑中,並不在body裡。引數型別直接用RequestBody
請求方法處:
public Observable<BaseBean> uploadAvatar(File files,String useRNo){ RequestBody userNo = GsonUtils.toRequestBody(useRNo); RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/png"), files); MultipartBody.Part part = MultipartBody.Part.createFormData("file", files.getName(), photoRequestBody); return service.uploadAvatar(userNo,part); } //其中的GsonUtils.toRequestBody(useRNo) /* * 轉換成RequestBody * */ public static RequestBody toRequestBody(String object) { RequestBody requestBody = RequestBody.create(null, object); return requestBody; }
上面的RequestBody.create(null, object)
這裡的null,意思是說不給該引數設定型別,正常情況下可以設定為text/plain
什麼的。到此,介面除錯,測試通過