jackson的JSON View课程是什么?它是如何工作的?

我不明白Jackson的@JsonView( Views.MyClass.class )是什么。 我知道我可以通过这种方式 POJO的字段和方法进行注释,以过滤使用JSON序列化的注释的字段和方法。 但什么是Views.Myclass类? 它是jackson图书馆的模板类吗?

为什么Views类中有很多类? 例如这样:

class Views { static class Public { } static class ExtendedPublic extends PublicView { } static class Internal extends ExtendedPublicView { } } 

为什么需要它以及它如何工作?

使用@JsonView根据序列化的上下文过滤字段。 将数据返回到REST客户端时,根据调用的REST服务,我们需要限制在使用相同数据模型时将序列化哪些数据。

让我们说我们想要创建两个REST服务:

第一个服务返回一些用户信息,如名字和姓氏,但不返回附加到它的消息。

第二个服务返回第一个服务的所有信息以及附加到当前用户的消息。

使用@JsonView注释对POJO类进行@JsonView

用户Pojo类

 @JsonView(User.Views.Public.class) public String getFirstname() { return firstname; } @JsonView(User.Views.Public.class) public String getLastname() { return lastname; } 

消息Pojo类

 @JsonView(User.Views.Internal.class) public List getMessages() { return messages; } 

rest控制器

 @RestController public class SimpleRestController { @Autowired SimpleService simpleService; @RequestMapping(value = "/user/public", method = RequestMethod.GET) @JsonView(User.Views.Public.class) public User getUserWithPublicData() { return simpleService.loadUser(); } @RequestMapping(value = "/user/internal", method = RequestMethod.GET) @JsonView(User.Views.Internal.class) public User getUserWithInternalData() { return simpleService.loadUser(); } }