Retrofit上传头像并给该请求body添加参数---500 Internal Server Error

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值