改装不解析Java对象的JSON请求
最近,我不得不向Pocket API发出一个JSON请求,以修改端点。在他们的网站上,编码的JSON数组应该是这样的:改装不解析Java对象的JSON请求,java,json,retrofit,retrofit2,okhttp,Java,Json,Retrofit,Retrofit2,Okhttp,最近,我不得不向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=[访问令牌]&消费者密钥=[消费者密钥] 第一种解决方案 我使用的是翻新库,我写的方法是
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=[访问令牌]&消费者密钥=[消费者密钥]
第一种解决方案
我使用的是翻新库,我写的方法是:
@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;
}
以及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%3dcarchive%2CitemId%3D308680025%2Ctime%3D1505669208%5D&access\u-token=[access\u-token]和consumer\u-key=[consumer\u-key]
我的问题是,如何实现所需的JSON?谢谢两件事。首先,您的
Action
类需要一个适当的toString()
方法
@覆盖
公共字符串toString(){
返回“{\”action\“=”+action+
“,\”项目id\“=”+项目id+
“,\“时间\=”+时间+“}”;
}
其次,需要将操作
字段识别为单个对象,而不是字段列表,因此不要直接使用ArrayList,而是使用其toString()形式
调用modify(@Field(“actions”)字符串操作,
@字段(“访问令牌”)字符串令牌,
@字段(“消费者密钥”)字符串consumerKey);
然后,我不再使用
modify(actions,token,key)
而是使用modify(actions.toString(),token,key)
谢谢您的回复,我稍微修改了toString方法,以满足所需的要求:@重写公共字符串toString(){return“[{”action\:“+action+”,“time\:“+time+”,“item\u id:”+itemId+“}]”;}
一切正常!嗨,deyanm,如果这个Pocket帐户不仅仅是一个演示帐户,您可能需要从上面的问题中删除访问令牌和密钥。
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);
}
}