Jackson 通过删除“is”来重命名基元布尔字段

2022-08-31 07:28:24

这可能是重复的。但是我找不到解决我的问题的方法。

我有一个班级

public class MyResponse implements Serializable {

    private boolean isSuccess;

    public boolean isSuccess() {
        return isSuccess;
    }

    public void setSuccess(boolean isSuccess) {
        this.isSuccess = isSuccess;
    }
}

Getters 和 setters 由 Eclipse 生成。

在另一个类中,我将值设置为 true,并将其编写为 JSON 字符串。

System.out.println(new ObjectMapper().writeValueAsString(myResponse));

在 JSON 中,密钥显示为 .{"success": true}

我想要钥匙本身。Jackson 在序列化时是否使用了 setter 方法?如何使密钥成为字段名称本身?isSuccess


答案 1

这是一个稍微晚一点的答案,但对于访问此页面的其他人可能有用。

更改 Jackson 在序列化为 JSON 时使用的名称的一个简单解决方案是使用 @JsonProperty 注释,因此您的示例将变为:

public class MyResponse implements Serializable {

    private boolean isSuccess;

    @JsonProperty(value="isSuccess")        
    public boolean isSuccess() {
        return isSuccess;
    }

    public void setSuccess(boolean isSuccess) {
        this.isSuccess = isSuccess;
    }
}

然后,这将序列化为 JSON,但其优点是不必修改 getter 方法名称。{"isSuccess":true}

请注意,在这种情况下,您也可以将注释编写为,因为它只有单个元素@JsonProperty("isSuccess")value


答案 2

我最近遇到了这个问题,这就是我发现的。Jackson 将检查您传递给它的 getter 和 setter 的任何类,并将这些方法用于序列化和反序列化。这些方法中“get”、“is”和“set”后面的内容将用作 JSON 字段的键(getIsValid 和 setIsValid 的“isValid”)。

public class JacksonExample {   

    private boolean isValid = false;

    public boolean getIsValid() {
        return isValid;
    }

    public void setIsValid(boolean isValid) {
        this.isValid = isValid;
    }
} 

同样,“isSuccess”将变为“success”,除非更名为“isIsSuccess”或“getIsSuccess”。

在此处阅读更多内容: http://www.citrine.io/blog/2015/5/20/jackson-json-processor