首页 > 解决方案 > 在改造请求中使用额外的 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);
    }

标签: androidretrofit

解决方案


推荐阅读