杰克逊通过删除“是”来重命名原始布尔字段

新手上路,请多包涵

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

我有一个类

public class MyResponse implements Serializable {

    private boolean isSuccess;

    public boolean isSuccess() {
        return isSuccess;
    }

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

getter 和 setter 由 Eclipse 生成。

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

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

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

我想要密钥作为 isSuccess 本身。杰克逊在序列化时使用 setter 方法吗?如何使键成为字段名称本身?

原文由 iCode 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
2 个回答

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

更改 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 作为 {"isSuccess":true} ,但具有不必修改 getter 方法名称的优点。

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

原文由 Scott 发布,翻译遵循 CC BY-SA 3.0 许可协议

我最近遇到了这个问题,这就是我发现的。 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”将变为“成功”,除非重命名为“isIsSuccess”或“getIsSuccess”

在这里阅读更多: http ://www.citrine.io/blog/2015/5/20/jackson-json-processor

原文由 Utkarsha Padhye 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题