当前位置: 首页 > 面试题库 >

Jackson中的JSON View类是什么,它如何工作?

禄和宜
2023-03-14
问题内容

我不明白杰克逊的@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类

用户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<Message> getMessages() {
        return messages;
    }

休息控制器

@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();
    }
}


 类似资料:
  • 我刚刚开始在Haskell中编程,我遇到了以下定义:

  • 为了减少内核或跨进程内存泄漏(Spectre攻击),Linux内核1将使用一个新选项编译,引入到,以便通过所谓的retpoline执行间接调用。 这似乎是一个新发明的术语,因为谷歌搜索只是最近才使用(通常都是在2018年)。 1但是,它不是Linux特有的--类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。

  • 问题内容: 我不太了解其工作原理和作用。 我的主要目标是将它与配合使用以提高精度。 问题答案: 使用要跟踪字符串和重复值 通常按项目本身跟踪每个项目。对于给定的阵列,试图跟踪由每个变化的。问题是我们有重复的值,而角度将引发错误。解决该问题的一种方法是通过其他方式对对象进行角度跟踪。对于字符串,这是一个很好的解决方案,因为您实际上没有其他跟踪字符串的方法。 并触发摘要和输入焦点 您暗示您对角度有些陌

  • 问题内容: 我知道该函数的基数是将字符串转换为基数的基础。不应该将11的基数10与基数/基数16转换成a 而不是? 以下代码根据教科书打印17: 问题答案: 使用基数执行操作时,以11为底的16将被解析为17,这是一个简单的值。然后将其打印为基数10。 你要: 这将采用十进制值11(此刻没有底数,就像有“十一”个西瓜(比一个人的手指数多一个)),并用基数16进行打印,结果为。 当我们采用一个值时,

  • 伙计们,最近我决定回到PHP,做一些比简单的登录页面更复杂的事情。3年来,我一直在Java /JavaEE编程,对Java应用程序的体系结构有很好的理解。基本上,一个虚拟机(一个简单的操作系统进程)运行被称为字节码的编译代码。一个简单的Javaweb服务器基本上是一个java应用程序,它监听提供给Http请求的TCP端口,并相应地做出响应,当然它更复杂但这是它最初的工作。 现在,PHP怎么样?它是

  • 我搜索过,似乎这被称为列表理解,但它是如何工作的?