想要隐藏 Jackson 映射到 JSON 的对象的某些字段

新手上路,请多包涵

我有一个用户类,我想使用 Jackson 将其映射到 JSON。

 public class User {
    private String name;
    private int age;
    private int securityCode;

    // getters and setters
}

我使用 - 将其映射到 JSON 字符串

User user = getUserFromDatabase();

ObjectMapper mapper = new ObjectMapper();
String json =  mapper.writeValueAsString(user);

我不想映射 securityCode 变量。有什么方法可以配置映射器以使其忽略此字段?

我知道我可以编写自定义数据映射器或使用 Streaming API,但我想知道是否可以通过配置来实现?

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

阅读 452
2 个回答

你有两个选择:

  1. 杰克逊在田间工作。所以,你可以只删除你想在 JSON 中省略的字段的 getter。 (如果你不需要在其他地方吸气剂。)

  2. 或者,您可以在该字段的 getter 方法上使用 Jackson 的 @JsonIgnore 注释, 结果 JSON 中没有这样的键值对。

    @JsonIgnore
   public int getSecurityCode(){
      return securityCode;
   }

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

在这里添加这个是因为其他人将来可能会再次搜索这个,比如我。此答案是已 接受答案 的扩展

You have two options:

1. Jackson works on setters-getters of fields. So, you can just remove getter of field which you want to omit in JSON. ( If you don't need getter at other place.)

2. Or, you can use the `@JsonIgnore` [annotation of Jackson][1] on getter method of that field and you see there in no such key-value pair in resulted JSON.

        @JsonIgnore
        public int getSecurityCode(){
           return securityCode;
        }

实际上, 较新版本的 Jackson 为 JsonProperty 添加了 READ_ONLY 和 WRITE_ONLY 注释参数。所以你也可以做这样的事情。

 @JsonProperty(access = Access.WRITE_ONLY)
private String securityCode;

代替

@JsonIgnore
public int getSecurityCode(){
  return securityCode;
}

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

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