网络框架用的是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
什么的。到此,接口调试,测试通过