gpt4 book ai didi

android - 使用 Retrofit 在 Multipart 中将名称/值对作为对象发送

转载 作者:行者123 更新时间:2023-11-30 01:36:17 24 4
gpt4 key购买 nike

在我的代码中,我必须发出 MultipartForm-Data PUT 请求来更新服务器中的对象,它应该是 Multipart,因为用户可能会将图像与数据一起发送。

为了做到这一点,我目前正在使用 Retrofit,因为它是一个我非常习惯的库,并且可以将图像发送到服务器。

但是,服务器端发生了变化,现在必须发送的参数之一是:

{"step":
{"type":"begin"}
}

然而事实证明,这出乎意料地难以做到。

我尝试过的方法包括将其作为 MultipartTypedOutput、手写字符串和转换为字符串的 JSONObject 传递,所有这些都给了我:

retrofit.RetrofitError: 400 Bad Request

正在使用的 URL 是正确的,我已经与维护服务器的人员进行了双重检查,并且它正在到达服务器,但是“步骤”对象不正确。

我也试过将它作为 NameValuePair、Map 和 HashMap 传递,所有这些都给了我:

retrofit.RetrofitError: Part body must not be null.

@FieldPart 看起来很完美,但与 Multipart 不兼容,那么有没有办法用 Retrofit 做到这一点?

我目前的 PUT 方法是这样的:

@Headers({
"Connection: Keep-Alive",
"Accept-Language: en-US"
})
@Multipart
@PUT("/0.1/user/{id}")
String updateUser(@Path("id") String userId, @Part("step") Map<String,String> type);

其中 Map 类型已更改为我之前提到的所有类型。

最佳答案

您实际上以正确的方式进行操作,只是需要一些快速修复。我有两个建议给你,1. 你可以这样创建一个内部类

public class Example {

@SerializedName("type")
@Expose
private String type;

/**
*
* @return
* The type
*/
public String getType() {
return type;
}

/**
*
* @param type
* The type
*/
public void setType(String type) {
this.type = type;
}

}

在这种情况下,您的 api 将如下所示

@Multipart
@PUT("/0.1/user/{id}")
String updateUser(@Path("id") String userId, @Part("step") Example exp);
  1. 或者,您可以使用 JsonObject,这不是您已经使用的 Apache JSONObject。它是 com.google.gson 包下的 google gson 对象。在这里您需要执行以下操作,JsonObject settingObject = new JsonObject();settingObject.addProperty("类型", "开始");在这种情况下,它将是,

    String updateUser(@Path("id") String userId, @Part("step") JsonObject obj);

这就是您所需要的,顺便说一句,您还可以一劳永逸地设置 header ,为什么要通过 api 定义它呢?

关于android - 使用 Retrofit 在 Multipart 中将名称/值对作为对象发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com