使用改造将此JSON发送到服务器POST

时间:2016-12-02 07:45:41

标签: android gson

{

    "first_name": "yy",
    "last_name": "uu",
    "mobile": "123456",
    "email": "qwerty32@g.com",
    "user_type":"user",
    "bio": "hell",
    "expertise_json": {"0":"1", "1":"2"}

}

这是我要发送的Josn, 我对这个用户的java classe:

public class User {
    @SerializedName("email")
    private String userEmail;
    @SerializedName("password")
    private String userPassword;
    @SerializedName("first_name")
    private String userFirstName;
    @SerializedName("last_name")
    private String userLastName;
    @SerializedName("mobile")
    private String userMobile;
    @SerializedName("user_type")
    private String userType;

    @SerializedName("expertise_json")
    @Expose
    private HashMap<String,String> userExpertise;

    @SerializedName("bio")
    private String bio;
   }

public interface ApiInterface {

    @POST("register")
    Call<User> createUser(@Body User user);
    @GET("init")
    Call<Expertises> getExpertise();

}

除了Experts_json之外,所有内容都保存到服务器。专业知识_json也是动态的,不限于2或3个值,但可以是任何10 20等。 任何帮助将受到高度赞赏。谢谢

3 个答案:

答案 0 :(得分:1)

用以下内容替换您的用户类:

public class User {
@SerializedName("email")
private String userEmail;
@SerializedName("password")
private String userPassword;
@SerializedName("first_name")
private String userFirstName;
@SerializedName("last_name")
private String userLastName;
@SerializedName("mobile")
private String userMobile;
@SerializedName("user_type")
private String userType;

@SerializedName("expertise")
@Expose
private HashMap<String,String> userExpertise;

@SerializedName("bio")
private String bio;

}

答案 1 :(得分:0)

尝试这种方式:

@SerializedName("expertise")
@Expose
private Expertise expertise;

<强> Expertise.java

public class Expertise {

@SerializedName("0")
@Expose
private String _0;
@SerializedName("1")
@Expose
private String _1;

public String get0() {
return _0;
}

public void set0(String _0) {
this._0 = _0;
}

public String get1() {
return _1;
}

public void set1(String _1) {
this._1 = _1;
}

答案 2 :(得分:0)

我在你的代码中看到“ @SerializedName ”,所以应该使用gson。
这是一个链接,说明@SerializedName注释的基本目的是什么。

what is the basic purpose of @SerializedName annotation in android using Gson

因此,当您使用@SerializedName时,这意味着您使用json中特定标记的值指定字段的值。对于您的情况,这意味着字段 userExpertise 使用json中的 expertise_json 的值,这根本不存在。解决方案可以将专业知识_json 更改为专业知识

public class User {

  @SerializedName("email")       private String userEmail;
  @SerializedName("password")    private String userPassword;
  @SerializedName("first_name")  private String userFirstName;
  @SerializedName("last_name")   private String userLastName;
  @SerializedName("mobile")      private String userMobile;
  @SerializedName("user_type")   private String userType;

  @SerializedName("expertise") 
  @Expose
  private HashMap<String,String> userExpertise;

  @SerializedName("bio") private String bio;

}

添加
这里:在你的代码中。

public interface ApiInterface {

  @POST("register")
  Call<User> createUser(@Body User user);  // watch this param, 'User user'

  ...

现在,让我们回到json文件

{
  "status": true,
  "body": {
     "first_name": "yy",
     ...
     "expertise_json": {"0":"1", "1":"2"}
  }
}

问题在于:
您发送的内容为用户,而用户,则其字段为 userEmail userType < / strong>等,但没有状态字段,没有 body 字段。

所以你想要gson工作,你应该提供一个包含这些字段的类。

public class User {
    @SerializedName("status")    private boolean status;
    @SerializedName("body")      private Body body;

    public static class Body {
        @SerializedName("email")       private String userEmail;
        @SerializedName("password")    private String userPassword;
        @SerializedName("first_name")  private String userFirstName;
        @SerializedName("last_name")   private String userLastName;
        @SerializedName("mobile")      private String userMobile;
        @SerializedName("user_type")   private String userType;

        @SerializedName("expertise") 
        @Expose
        private HashMap<String,String> userExpertise;

        @SerializedName("bio") private String bio;
    }
 }

现在应该可以了。