问题:
在@RestController
方法中返回对象时,可以轻松排除类属性(例如,未经授权不应公开的字段)。
class Article {
String title;
String content;
List<Comments> comments;
int status;
}
我希望能够轻松地将Article
个对象相应地返回到我拥有的三个场景中(这只是一个虚拟的foo吧,例如):
当前的想法
知道我有三个想法如何解决这个问题。
创意#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
在我看来,在生产中使用它似乎不够成熟。作者虽然活跃。
我相信我的问题很常见,必须有一个更简单的方法。
答案 0 :(得分:1)
您可以查看我为此目的创建的一个小项目。可能它符合您的需求: