如何在改造体中传递没有名称的 JsonArray 作为请求
How to pass JsonArray with no name as request in retrofit body
我想在 Retrofit 体内传递没有名称的 Json 数组,但我得到 400 error.I 想通过 [=17= 传递这个没有名称的 json 数组] 是我想要的 json 数组 pass.Also 我正在为此使用 PATCH 方法。
[{
"op": "replace",
"path": "/billing_address/line1",
"value": "some other value"}]
我正在使用以下方法,在这个方法中,我在 logcat 中得到了我想要的列表的相同响应,但是在将它传递到 getAuthentionToken 之后,我收到了 400 错误。
Call<JSONResponse> getAuthentionToken(@Body List obj);
JSONObject jobj = new JSONObject();
jobj.put("op","replace");
jobj.put("path","/billing_address/line1");
jobj.put("value","some other value");
List arrlist = new ArrayList();
arrlist.add(jobj);
apiInterface.getAuthentionToken(arrlist).enqueue(new Callback<JSONResponse>() {
如果您通过请求正文发送数据,您的实现应该是这样的:
- 根据字段定义模型(区分大小写 "Name" -> 字符串名称等)
- 设置你的api功能也像那样
@POST("/api/geo/getLoc")
public void getFriendsLocation(@Body YourClass classObject, Callback<JsonElement> response);
在 post 请求中直接使用您创建的 class 对象
getFriendsLocation(yourClassObjectThatIncludesFields, new Callback .... );
如果您通过参数发送数据,您可以使用 Gson 执行此操作。
1. 假设您有一个 class,其中包含 id 、 number 和 FriendNumber.Define 等字段,一个函数:
public static Map<String, Object> getMapFromObject(Object o) {
Gson gson = new Gson();
Type stringObjectMap = new TypeToken<Map<String, Object>>() {
}.getType();
return gson.fromJson(gson.toJson(o), stringObjectMap);
}
2。把你的 api 函数也设置成那样
@POST("/api/geo/getLoc")
public void getFriendsLocation(@QueryMap Map<String, Object>, Callback<JsonElement> response);
当您发送 post 请求时,从您的字段中创建对象调用此函数,如下所示
getFriendsLocation(getMapFromObject(yourClassObjectThatIncludesFields), new Callback .... );
我没有编写包含 class 定义和回调函数的完整代码,因为它们取决于您的自定义。我假设您需要发送正文,所以请尝试第一种方式。
以下是对我来说正确的答案,它的工作很好。
public class 卡片更新 {
public String op;
public String path;
public String value;
public CardUpdate(String op, String path, String value) {
this.op = op;
this.path = path;
this.value = value;
}
public String getOp() {
return op;
}
public void setOp(String op) {
this.op = op;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
/*return "CardUpdate{" +
"op='" + op + '\'' +
", path='" + path + '\'' +
", value='" + value + '\'' +
'}';*/
return "{" +'"'+
"op" + '"'+":" +'"' +op + '"'+
"," + '"'+"path" + '"'+":" + '"'+ path + '"'+
"," + '"'+"value" + '"'+":" + '"'+ value + '"'+
'}';
}
}
CardUpdate updatt = new CardUpdate("replace","/billing_address/line1","some other value");
List<CardUpdate> cardddd = new ArrayList<CardUpdate>();
cardddd.add(updatt);
我想在 Retrofit 体内传递没有名称的 Json 数组,但我得到 400 error.I 想通过 [=17= 传递这个没有名称的 json 数组] 是我想要的 json 数组 pass.Also 我正在为此使用 PATCH 方法。
[{
"op": "replace",
"path": "/billing_address/line1",
"value": "some other value"}]
我正在使用以下方法,在这个方法中,我在 logcat 中得到了我想要的列表的相同响应,但是在将它传递到 getAuthentionToken 之后,我收到了 400 错误。
Call<JSONResponse> getAuthentionToken(@Body List obj);
JSONObject jobj = new JSONObject();
jobj.put("op","replace");
jobj.put("path","/billing_address/line1");
jobj.put("value","some other value");
List arrlist = new ArrayList();
arrlist.add(jobj);
apiInterface.getAuthentionToken(arrlist).enqueue(new Callback<JSONResponse>() {
如果您通过请求正文发送数据,您的实现应该是这样的:
- 根据字段定义模型(区分大小写 "Name" -> 字符串名称等)
- 设置你的api功能也像那样
@POST("/api/geo/getLoc")
public void getFriendsLocation(@Body YourClass classObject, Callback<JsonElement> response);
在 post 请求中直接使用您创建的 class 对象
getFriendsLocation(yourClassObjectThatIncludesFields, new Callback .... );
如果您通过参数发送数据,您可以使用 Gson 执行此操作。
1. 假设您有一个 class,其中包含 id 、 number 和 FriendNumber.Define 等字段,一个函数:
public static Map<String, Object> getMapFromObject(Object o) {
Gson gson = new Gson();
Type stringObjectMap = new TypeToken<Map<String, Object>>() {
}.getType();
return gson.fromJson(gson.toJson(o), stringObjectMap);
}
2。把你的 api 函数也设置成那样
@POST("/api/geo/getLoc")
public void getFriendsLocation(@QueryMap Map<String, Object>, Callback<JsonElement> response);
当您发送 post 请求时,从您的字段中创建对象调用此函数,如下所示
getFriendsLocation(getMapFromObject(yourClassObjectThatIncludesFields), new Callback .... );
我没有编写包含 class 定义和回调函数的完整代码,因为它们取决于您的自定义。我假设您需要发送正文,所以请尝试第一种方式。
以下是对我来说正确的答案,它的工作很好。
public class 卡片更新 {
public String op;
public String path;
public String value;
public CardUpdate(String op, String path, String value) {
this.op = op;
this.path = path;
this.value = value;
}
public String getOp() {
return op;
}
public void setOp(String op) {
this.op = op;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
/*return "CardUpdate{" +
"op='" + op + '\'' +
", path='" + path + '\'' +
", value='" + value + '\'' +
'}';*/
return "{" +'"'+
"op" + '"'+":" +'"' +op + '"'+
"," + '"'+"path" + '"'+":" + '"'+ path + '"'+
"," + '"'+"value" + '"'+":" + '"'+ value + '"'+
'}';
}
}
CardUpdate updatt = new CardUpdate("replace","/billing_address/line1","some other value");
List<CardUpdate> cardddd = new ArrayList<CardUpdate>();
cardddd.add(updatt);