【问题标题】:Jackson - Ignore attributes with specific name杰克逊 - 忽略具有特定名称的属性
【发布时间】:2017-08-29 18:30:50
【问题描述】:

是否可以将 Jackson 配置为根据属性名称忽略对象的属性?

我正在使用 Jackson 序列化 Hibernate 实体,并且我的 JSON 文件中的每个对象都带有我想忽略的“hibernateLazyInitializer”属性。还有很多类有一个我也想忽略的“getFieldsValues”方法。

我知道我可以使用 Jackson 注释来忽略某些属性,但这将是很多手工操作。但在这种情况下,我需要忽略许多对象共有的属性,并且由 Jackson 自动解析。

【问题讨论】:

    标签: java json rest jackson jersey


    【解决方案1】:

    根据您在评论中的更新问题描述,我会尽力提供更好的参考:

    • 使用注解是最简洁的方式,如与休眠增强 POJO 相关的几篇文章中所述
    • 可能还满足的方法是在 ObjectMapper 中设置它,这将导致空(但存在)字段 - mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 。也许如果你将它与objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 结合起来,它可能会完全消除这些字段。
    • 最后,另一种(但不好的)方法是通过注册一个为所有类型的 POJO 应用JsonSerializer<T> 实例的模块来修改 Jackson 的行为。在这种情况下,您将手动取消设置使用 defaultSerializer 创建的 JsonNode 中的字段。同样,这是个坏主意。

    【讨论】:

    • 我需要将属性名称传递给杰克逊,这样他就可以在他看到的任何类中忽略它。
    • @DiegoVictordeJesus 使用视图注释标记字段,您可以在特定场景中将其排除/包含在每个序列化/反序列化请求中(即通过在反序列化时将所需的视图传递给 ObjectMapper)。这怎么不能满足您的需求?
    • @DiegoVictordeJesus 请稍微扩展一下这个问题。你为什么关心这个字段是否被反序列化。请“取消投票”我,因为我实际上是在花时间尝试帮助你。
    • 我正在用 Jackson 序列化 Hibernate 实体,我的 JSON 文件中的每个对象都带有我想忽略的 hibernateLazyInitializer 属性。我可以用@JsonIgnoreProperties 注释每个类,但我有很多类,我认为我可以用不同的方式来做。我也没有对你投反对票
    • @DiegoVictordeJesus 好的。基本上注释/标记为瞬态是最干净的方法。我会更新我的答案以更好地解释。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2023-04-10
    • 2020-02-12
    • 1970-01-01
    • 2016-04-19
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多