繁体   English   中英

Jackson object mapper not creating proper Json string from java object

[英]Jackson object mapper not creating proper Json string from java object

我的密钥中没有 A、B、C 我有 user_id、密码等密钥。此外,如果我打印用户 class 的 toString,它会显示正确的内容。

注意:用户 object 来自 sqlite 数据库,我仔细检查了它是否工作正常。

请同时检查附加用户 class。 我用这个 class 来保存 sqlite 值。

So I am getting user data from sqlite in the form of user object then converting user object into jsonstring using Jackson object mapper.

如果您指出问题所在,那将是非常有帮助的。

目前我低于 jsnstring,这是错误的。

 

    {"A":1,"B":1,"C":1,"D":1,"E":1,"F":1,"G":0,"H":"ef","I":"","J":0,"K":30,"L":"","M":1,"N":0,"O":1,"P":0,"Q":"","R":"","S":1,"T":"","U":1,"V":"fkGinMCh02k:APA91bH1I8Hv1EIGdkRtZiqjvsMY-ixk_crcNxSQ3gQ1PuAOoQ0B4qllstCdOw43nZQ90JiqTpcfCyQ-_y6RsxnWcjg0gojqZ8pv4Fia_9mW4-De7nPQF4C5XIF16V5","W":"","X":0,"Y":"1","Z":"1,2,3,4,5,6,7,9,16","a":91316,"b":"email@gmail.com","c":"","d":"im","e":"F","f":"","g":1,"h":1,"i":1,"j":2478,"k":492372,"l":0,"m":10,"n":0,"o":"","p":0,"q":0,"r":0,"s":91316,"t":1,"u":1,"v":1,"w":1,"x":1,"y":0,"z":0}

预期的 jsonstring

{"user_id":1,"first_name":"test","last_name":"test"}

当我从 java object 转换时,我在 jsonstring 中得到 abcd “key”而不是实际密钥。

我的实际密钥就像 user_id、email 等。

private String getUserObjectString() {
        String jsonStr = "";
        User user = here I am getting actual object content;
        ObjectMapper mapper = new ObjectMapper();
        try {
             jsonStr = mapper.writeValueAsString(user);
        } catch (JsonProcessingException e) {
            Log.i("Exception","1");
            e.printStackTrace();
        }
        return jsonStr;
    }

public class User {

    public int userid;
    public String email;
    public String updatedemail;
    public String firstname;
    public String lastname;
    // Empty constructor
    public User() {

    }

    // constructor
    public User(int userid, String email, String updatedemail, String firstname, String lastname){
     this.userid = userid;
        this.email = email;
        this.updatedemail = updatedemail;
        this.firstname = firstname;
        this.lastname = lastname;
    }
    public int getID() {
        return this.userid;
    }

    public void setID(int userid) {
        this.userid = userid;
    }

    public String getemail() {
        return this.email;
    }

    public String getfirstname() {
        return this.firstname;
    }

    public String getlastname() {
        return this.lastname;
    }
    public void setFirstName(String firstname) {
        this.firstname = firstname;
    }

    public void setLastName(String lastname) {
        this.lastname = lastname;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNewemail() {
     return this.updatedemail;
    }

    public void setNewemail(String newemail) {
     this.updatedemail = newemail;
    }

@Override
    public String toString() {
        return "User{" +
                "userid=" + userid +
                ", email='" + email + '\'' +
                ", updatedemail='" + updatedemail + '\'' +
                ", firstname='" + firstname + '\'' +
                ", lastname='" + lastname + '\'' +
    '}';
    }
}

这是 toString() 的 output

User{userid=91316, email='vasimflutter2@gmail.com', updatedemail='', firstname='Vasim', lastname='Flutter2'}

您的User POJO 应正确注释:

  1. 所有私有字段都应使用@JsonProperty("key of your element in JSON")进行注释(例如@JsonProperty("userId")字段private int userId
  2. 构造函数应该有注释@JsonCreator告诉 Jackson 它应该在构建 object 时使用该构造函数
  3. 构造函数内部传递的所有参数都应使用@JsonProperty(name = "the key of your element", required = true/false)进行注释
  4. 吸气剂应遵守 Java 约定getElement() - 您可以使用 IDE 自动创建它们

正确注释 POJO 后,您可以:

  1. 使用以下命令从 JSON 字符串创建 Java objectMapper.valueToTree(jsonString, User.class)
  2. 使用objectMapper.writeValueAsString(user)创建现有User user实例的 JSON 表示。

注意:注释不是“强制性的”,但强烈推荐。 如果你不注释你的字段和构造函数/getter,Jackson 将不得不猜测。 对库进行猜测从来都不是一件好事,最好是明确的,这样您就可以根据需要命名属性,或者可能在没有副作用的情况下出错。


总结一下:

public class User {

    @JsonProperty("userId") // <- note: the literal value here should be exactly what you see in your Json (case included)
    public int userid;
    @JsonProperty("email")
    public String email;
    @JsonProperty("updateEmail")
    public String updatedemail;
    @JsonProperty("firstName")
    public String firstname;
    @JsonProperty("lastName")
    public String lastname;

    @JsonCreator
    public User(
            @JsonProperty(name = "userId", required = true) int userid,
            @JsonProperty(name = "email", required = true) String email,
            @JsonProperty(name = "updateEmail", required = true) String updatedemail,
            @JsonProperty(name = "firstName", required = true) String firstname,
            @JsonProperty(name = "lastName", required = true) String lastname
    ) {
        this.userid = userid;
        this.email = email;
        this.updatedemail = updatedemail;
        this.firstname = firstname;
        this.lastname = lastname;
    }

    public int getUserid() {
        return userid;
    }

    public String getEmail() {
        return email;
    }

    public String getUpdatedemail() {
        return updatedemail;
    }

    public String getFirstname() {
        return firstname;
    }

    public String getLastname() {
        return lastname;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM