【问题标题】:Apply JsonView when serialising property with Jackson使用 Jackson 序列化属性时应用 JsonView
【发布时间】:2016-10-06 22:00:26
【问题描述】:

我有以下要序列化的类。

class User {

    private String username;
    @JsonView(Views.Default.class)
    private List<User> followers;
}

视图定义如下:

class Views {
    static class Default { }
    static class Follower { } 
}

这个想法是获取用户并显示关注者列表(用户类型),但没有followers字段。

{
  "username": "aaaaa",
  "followers": [
    { "username" : "bbbbb" },
    { "username" : "ccccc" }
  ]
}

在序列化 User 对象时,告诉 Jackson 在 followers 属性上应用 Follower 视图的最佳方法是什么?

使用当前配置,我仍然可以在用户数组中看到 followers 属性。

谢谢。

【问题讨论】:

  • 没有追随者财产意味着什么?你想只返回 json 数组作为响应吗?
  • @eg04lt3r 表示followers 中的用户对象必须使用Views.Followers.class 视图反序列化。 followers 属性将在外部对象中可见,但在内部对象中不可见。
  • 如果我理解正确,您希望在序列化时在用户的子集合中隐藏追随者属性,对吧?
  • @eg04lt3r 完全正确!
  • 我认为您应该为此使用某种过滤器,请查看此链接codedump.io/share/kDsdkw2CeMNV/1/…。它可能会对你有所帮助,我想没有过滤器就无法解决这个问题。

标签: java jackson


【解决方案1】:

您需要使用ObjectWriter 而不是ObjectMapper 来指定用于序列化的活动视图。所以,例如:

String json = mapper.writerWithView(Views.Compact.class)
   .writeValueAsJson(user);

因为您需要使用Default(或其子类)以外的视图:视图用于包含。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多