美文网首页
retrofit提交文件时附带参数错误

retrofit提交文件时附带参数错误

作者: _蘇芳_ | 来源:发表于2019-11-26 10:25 被阅读0次

如下图所示,uploadFile是文件,relationId、type这种是提交时附带的参数

    @Multipart
    @POST("api/common/upload/user/pic")
    suspend fun uploadAvatar(
        @Part("relationId") relationId :String,
        @Part("type") type :String,
        @Part uploadFile :MultipartBody.Part //此处part不能设置value,提交名称在下面设置
    ):Response<BaseDTO<*>>

如果retrofit添加了.addConverterFactory(GsonConverterFactory.create()),提交时会当做json提交,如果直接在接口中定义@Part("relationId") relationId :String,contentType会是application-json,提交的字符串会多拼上一堆双引号

将接口修改为:

    @Multipart
    @POST("api/common/upload/user/pic")
    suspend fun uploadAvatar(
        @Part("relationId") relationId :RequestBody,
        @Part("type") type :RequestBody,
        @Part uploadFile :MultipartBody.Part
    ):Response<BaseDTO<*>>

参数用下面方式生成即可:

    // 文件
    fun fileToMultiPart(file: File,name:String=uploadFile):MultipartBody.Part {
        val requestBody = RequestBody.create(MultipartBody.FORM, file)
        val part = MultipartBody.Part.createFormData(name, file.name, requestBody) //提交名称在这设置
        return part
    }
    // 图片
    fun getImgRequestBody(file:File) = RequestBody.create(MediaType.parse("image/*"),  file)
    // 字符串,上面的接口中 type和relationId用这个生成requestBody
    fun getTextRequestBody(txt:String) = RequestBody.create(MediaType.parse("text/plain"),  txt)

    /*----------- 下面都是生成json的requestBody---------------------*/
    fun getRequestBody(params: Map<String, Any>): RequestBody {
        return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JSONObject(params).toString())
    }

    fun getRequestBody(jsonObject: JSONObject): RequestBody {
        return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonObject.toString())
    }

    fun getRequestBody(json: String): RequestBody {
        return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json)
    }

    fun getRequestBody(`object`: Any): RequestBody {
        val json = Gson().toJson(`object`)
        return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json)

相关文章

  • retrofit提交文件时附带参数错误

    如下图所示,uploadFile是文件,relationId、type这种是提交时附带的参数 如果retrofit...

  • Retrofit 中文乱码问题的解决

    Retrofit 中文乱码问题 使用retrofit和rxjava,提交数据时需注意,当数据中有中文时,传到后台,...

  • Java 客户端上传到服务器

    说明:解决上传文件乱码问题,上传文件件,附带参数等。 引入包: org.apache.httpcomponents...

  • Git配置SSH Key

    在使用Git拉取或提交文件时,如果走http的方式,文件太大会造成提交报错,这时就必须走SSH的方式,具体错误可以...

  • Git配置SSH Key

    在使用Git拉取或提交文件时,如果走http的方式,文件太大会造成提交报错,这时就必须走SSH的方式,具体错误可以...

  • Retrofit 上传文件带参数

    方法一 方法2

  • BindException与MethodArgumentNotV

    基于表单提交时,参数校验异常,会抛出:BindException基于json提交时,参数校验异常,会抛出:Meth...

  • rm提示参数过长

    在linux中删除大量文件时,直接用rm会出现:-bash: /bin/rm: 参数列表过长的错误。 rm提示参数...

  • formData

    一、现存的问题 使用传统的form表单提交参数(或者文件)时,只要提交就会有以下两个问题:1、无法处理回调函数2、...

  • SpringMVC:实现form表单数据+文件提交

    需要实现在jsp里提交表单时,文件以及其它参数都能被controller获取到。 参考网址①https://blo...

网友评论

      本文标题:retrofit提交文件时附带参数错误

      本文链接:https://www.haomeiwen.com/subject/sxcewctx.html