gpt4 book ai didi

java - 改造 JSON 请求不解析 Java 对象

转载 作者:行者123 更新时间:2023-11-30 06:30:27 25 4
gpt4 key购买 nike

最近我必须向 Pocket API 发出 JSON 请求以获取修改端点。在他们的网站上,编码的 JSON 数组应该是这样的:
https://getpocket.com/v3/send?actions=%5B%7B%22action%22%3A%22archive%22%2C%22time%22%3A1348853312%2C%22item_id%22%3A229279689%7D%5D&access_token=[ACCESS_TOKEN]&consumer_key=[CONSUMER_KEY]

第一个解决方案

我使用的是Retrofit库,我写的方法是这样的:

@Headers("X-Accept: application/json")
@FormUrlEncoded
@POST("v3/send")
Call<ModifyItem> modify(@Field("actions[]") ArrayList<String> actions,
@Field("access_token") String token,
@Field("consumer_key") String consumerKey);

class ModifyItem {
public ArrayList<Boolean> action_results;
public int status;
}

以及 Logging Interceptor 中从 OkHttp 生成的 JSON 请求:
actions%5B%5D=1689582274&actions%5B%5D=archive&actions%5B%5D=1505667307&access_token=[ACCESS_TOKEN]&consumer_key=[CONSUMER_KEY]

第二种解决方案

如您所见,该请求不是我需要的。当我尝试使用 POJO 类来实现它时,应该是这样的:

@Headers("X-Accept: application/json")
@FormUrlEncoded
@POST("v3/send")
Call<ModifyItem> modify(@Field("actions[]") ArrayList<Action> actions,
@Field("access_token") String token,
@Field("consumer_key") String consumerKey);

class ModifyItem {
public ArrayList<Boolean> action_results;
public int status;
}

以及 POJO 类:

public class Action implements Serializable {

@SerializedName("action")
@Expose
private String action;
@SerializedName("item_id")
@Expose
private String itemId;
@SerializedName("time")
@Expose
private String time;

public String getAction() {
return action;
}

public void setAction(String action) {
this.action = action;
}

public String getItemId() {
return itemId;
}

public void setItemId(String itemId) {
this.itemId = itemId;
}

public String getTime() {
return time;
}

public void setTime(String time) {
this.time = time;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}

但是 JSON 请求是这样的:
actions%5B%5D=com.deyanm.pocketapispike.data.Action%4075efc7d1%5Baction%3Darchive%2CitemId%3D308680025%2Ctime%3D1505669208%5D&access_token=[ACCESS_TOKEN]&consumer_key=[CONSUMER_KEY]

我的问题是如何实现所需的 JSON?谢谢

最佳答案

有两件事。首先,您的 Action 类需要一个正确的 toString() 方法。

@Override
public String toString() {
return "{\"action\"=" + action +
",\"item_id\"=" + itemId +
",\"time\"=" + time + "}";
}

其次,actions 字段需要被识别为单个对象,而不是字段列表,因此不要直接使用 ArrayList,而是使用其 toString() 形式

Call<ModifyItem> modify(@Field("actions") String actions,
@Field("access_token") String token,
@Field("consumer_key") String consumerKey);

然后使用 modify(actions.toString(), token, key) 而不是 modify(actions, token, key)

关于java - 改造 JSON 请求不解析 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266910/

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