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

标签 java json serialization jackson

我不明白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 类

用户 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;
    }

休息 Controller

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

关于java - Jackson 中的 JSON View 类是什么,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38279782/

相关文章:

java - 如何在没有时间的情况下将LocalDate保存到MongoDB(为什么即使我只保存日期,mongo也会随时间保存日期)?

arrays - 将 json 文件编码到 map 中

python - 为什么这个自定义 json 编码器不起作用?

python - 解析Json数据到Excel

java - HashSet 代替 ArrayList 在性能上存在缺陷

javascript - Java:从页面获取 JavaScript 数组元素

java - 火力地堡安卓 : Display data randomly

c# - Entity Framework 到 json - 分组数据

jquery - 将表数据转换为 JSON

php - PHP 中的序列化和 utf-8