当前位置: 首页 > 知识库问答 >
问题:

如何使用Multipart在retrifit2中随图像一起发送整数列表

胡高朗
2023-03-14

我试图上传一个图像使用改型2.0。我有几个其他的参数与表单数据一起发送,其中包括一个整数列表。我的请求声明是

@Multipart
@POST("/api/Add")
    Call<AddResponse> addApi(@Part("Id") RequestBody id,
                             @Part("Name") RequestBody name,
                             @Part("Description") RequestBody description,
                             @Part("Phone") RequestBody phone,
                             @Part MultipartBody.Part logo,
                             @Part("WorkingDays") RequestBody workingDays,
                             @Part("CitiesIDs") RequestBody cities);
public class RetrofitService {

    private static Retrofit retrofit;
    private static final Object LOCK = new Object();
    private static final String BASE_URL = "https://baseurl.app";

    public static Retrofit getRetrofitInstance() {

        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.addInterceptor(chain -> {
            Request original = chain.request();

            Request.Builder requestBuilder = original.newBuilder()
           .addHeader("Content-Type", "application/json");

            Request request = requestBuilder.build();
            return chain.proceed(request);
        });

        OkHttpClient client = httpClient.build();

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        httpClient.addInterceptor(logging);
        httpClient.readTimeout(60, TimeUnit.SECONDS);
        httpClient.connectTimeout(60, TimeUnit.SECONDS);
        if (retrofit == null) {
            synchronized (LOCK) {
                retrofit = new retrofit2.Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .client(client)
                        .addConverterFactory(ScalarsConverterFactory.create())
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(httpClient.build())
                        .build();
            }
        }

        return retrofit;
    }

这种方式不像预期的那样工作,像下面这样单独发送的整数列表。

Content-Disposition: form-data; name="CitiesIDs"
Content-Transfer-Encoding: binary
Content-Type: multipart/form-data; boundary=290d2964-526a-48b9-b742-c6a3b547c7d6
Content-Length: 286
--290d2964-526a-48b9-b742-c6a3b547c7d6
Content-Disposition: form-data; name="CitiesIDs"
Content-Length: 1
7
--290d2964-526a-48b9-b742-c6a3b547c7d6
Content-Disposition: form-data; name="CitiesIDs"
Content-Length: 1
8
--290d2964-526a-48b9-b742-c6a3b547c7d6--

另外,为了将整数列表转换为RequestBody,我使用了下面的方法

okhttp3.MultipartBody.Builder citiesRequestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);

  for(int i=0; i<citiesIdList.size(); ++i){
  citiesRequestBodyBuilder.addFormDataPart("CitiesIDs", String.valueOf(citiesIdList.get(i)));
   }

 {"Success":false,
  "ErrorMessage":"Input string '--290d2964-526a-48b9-b742-c6a3b547c7d6' is not a valid number. Path '', line 1, position 38.",
 "Id":0}

共有1个答案

柳和怡
2023-03-14

您必须使用multipartbody.part仅用于文件,而其他字段应与requestbody一起使用。

删除以下代码

for(int i=0; i<citiesIdList.size(); ++i){
  citiesRequestBodyBuilder.addFormDataPart("CitiesIDs", String.valueOf(citiesIdList.get(i)));
   }

使用

 // Add other field here
RequestBody description =
            RequestBody.create(
                    okhttp3.MultipartBody.FORM, Gson().toJson(citiesIdList));
 类似资料:
  • 我正在Spring-Boot中实现微服务。我尝试将@RequestBody与一个MultipartFile一起发送。我在stackoverflow中引用了一些问题,但没有任何帮助。 视频类 方法 我只是试着用@requestpart,并附上我如何请求的屏幕截图 错误为

  • 我正在寻找一种方法来做到这一点。我想知道我们是否也可以发送,服务器是否必须更改API结构的任何内容,比如当前字节的接受字符串,我们将把它更改为的文件。

  • 问题内容: 我正在尝试使用Jetty将带有RestTemplate的文件上传到Raspberry Pi。在Pi上,正在运行一个servlet: 我能够成功卷曲 这是应该在webapp上具有相同功能的方法。 这是我得到的输出: ui-elements.html上传了! org.springframework.web.multipart.support.StandardMultipartHttpSer

  • 问题内容: 我正在开发使用不同服务其余部分的图形界面(用Java编写)。我必须调用这样的服务: 呼叫服务: 当我从Angularjs服务文件中请求时,如果服务具有Content-Type = multipart / form- data,则会收到错误400(错误请求) 如果服务的Content-Type =“ application / x-www-form-urlencoded; charset

  • 如何在Python中用请求发送?如何发送文件,我明白了,但是如何用这种方法发送表单数据就不明白了。

  • 问题内容: 我在使用jQuery的ajax函数将文件发送到服务器端PHP脚本时遇到问题。可以获取File- List,但是如何将此数据发送到服务器呢?使用文件输入时,服务器端php脚本上的结果数组()为0()。 我知道这是可能的(尽管直到现在我还没有找到任何jQuery解决方案,只有Prototye代码(http://webreflection.blogspot.com/2009/03/safar