在Spring MVC中排除JSON(在Jackson序列化期间)的属性

时间:2015-09-24 09:31:29

标签: java json spring spring-mvc jackson

问题:

@RestController方法中返回对象时,可以轻松排除类属性(例如,未经授权不应公开的字段)。

class Article {
     String title;
     String content;
     List<Comments> comments;
     int status;
}

我希望能够轻松地将Article个对象相应地返回到我拥有的三个场景中(这只是一个虚拟的foo吧,例如):

  1. 包括所有字段
  2. 包括标题,内容,评论
  3. 包含标题和内容
  4. 当前的想法

    知道我有三个想法如何解决这个问题。

    创意#1

    使用@JsonView。它有效,但它远非一种简单直接的方法(除非我误解了文档)

    我可以使用@JsonView注释所有字段,这看起来很容易,但在未来的开发中会变得非常复杂。

    class Article {
         @JsonView({ArticleView.List.class, ArticleView.Detail.class, ArticleView.Admin.class})
         String title;
         @JsonView({ArticleView.Detail.class, ArticleView.Admin.class})
         String content;
         @JsonView({ArticleView.Detail.class, ArticleView.Admin.class})
         List<Comments> comments;
         @JsonView({ArticleView.Admin.class})
         int status;
    }
    

    每次添加新视图时,都需要我修改一个包含视图的新属性。我还需要注释每一个属性(我希望尽可能像POJO一样。

    创意#2

    DTO - 我想避免创建DTO,特别是因为添加新字段可能意味着在所有类中添加它(虽然它似乎是我当前的选择)

    创意#3

    https://github.com/monitorjbl/json-view

    在我看来,在生产中使用它似乎不够成熟。作者虽然活跃。

    我相信我的问题很常见,必须有一个更简单的方法。

1 个答案:

答案 0 :(得分:1)

您可以查看我为此目的创建的一个小项目。可能它符合您的需求:

https://github.com/Antibrumm/jackson-antpathfilter