android - 在改造请求中使用额外的 nameValuePair 格式化 JSON
问题描述
我在改造的帮助下向服务器发送一个请求。在请求正文中,我必须传递 JSON。从 POJO 我得到的 JSON 格式如下
{
"id": "22",
"firstname": "abcd",
"lastname": "pqrl",
"mail": "abcd@gmail.com",
"access": true,
"has_access": true,
"iduser": 17,
"accepted": false
}
而不是这个,我必须发送给身体的是下面
{
"user": {
"id": "22",
"firstname": "abcd",
"lastname": "pqrl",
"mail": "abcd@gmail.com",
"access": true,
"has_access": true,
"iduser": 17,
"accepted": false
}
}
所以我所做的是我创建了 JSONObject
final JSONObject parent = new JSONObject();
try {
parent.put("user",**myPojoJson**);
} catch (JSONException e) {
e.printStackTrace();
}
有了这个,我可以获得我想要的 JSON 格式,但是 JSON 中添加了一些额外的值,即 nameValuePair
{
"nameValuePairs": {
"User": {
"id": "22",
"firstname": "abcd",
"lastname": "pqrl",
"mail": "abcd@gmail.com",
"access": true,
"has_access": true,
"iduser": 17,
"accepted": false
}
}
}
我在网上查了一下,有使用使用 com.google.gson.JsonObject 而不是 org.json.JSONObject 的解决方案。但是有什么方法我仍然可以使用 JSONObject 并能够实现我想要的吗?
编辑添加 POJO
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Vishvendu {
@SerializedName("id")
@Expose
private String id;
@SerializedName("firstname")
@Expose
private String firstname;
@SerializedName("lastname")
@Expose
private String lastname;
@SerializedName("mail")
@Expose
private String mail;
@SerializedName("access")
@Expose
private Boolean access;
@SerializedName("has_access")
@Expose
private Boolean hasAccess;
@SerializedName("iduser")
@Expose
private Integer iduser;
@SerializedName("accepted")
@Expose
private Boolean accepted;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public Boolean getAccess() {
return access;
}
public void setAccess(Boolean access) {
this.access = access;
}
public Boolean getHasAccess() {
return hasAccess;
}
public void setHasAccess(Boolean hasAccess) {
this.hasAccess = hasAccess;
}
public Integer getIduser() {
return iduser;
}
public void setIduser(Integer iduser) {
this.iduser = iduser;
}
public Boolean getAccepted() {
return accepted;
}
public void setAccepted(Boolean accepted) {
this.accepted = accepted;
}
}
这就是我向请求添加正文的方式
interface LoginApi {
@PUT("user/abcd")
Call<abcdResponse> updateabcdStatus(@Body JSONObject parent);
}
解决方案
推荐阅读
- apache - 如何使用非根上下文路径为 Apache 和 Jetty 主机设置反向代理
- spring-boot - Feign 客户端无法拨打电话 - Kubernetes
- nginx - 如何使用 ELK 堆栈监控 nginx 响应时间?
- node.js - 即使我的终端关闭,我如何让我的不和谐机器人保持在线
- javascript - 如何在javascript中找到没有内置函数的子字符串?
- angular - ionic 4如何通过单击按钮更改幻灯片
- java - 将我的普通 RecyclerView 迁移到 RecyclerView 数据绑定
- r - 将两个数据帧合并到一个匹配变量上,只为其他不相交的变量保留一个值
- android - 将数据从 recyclerview 适配器传递到片段时遇到问题
- swift - 包含声明的闭包不能与函数生成器“ViewBuilder”一起使用