gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:49:29 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com