java - Spring中使用JsonFilter进行动态序列化
问题描述
我正在尝试在 Spring Boot 2 中动态序列化给定的 POJO。我的用例是,我有一个非常大的模型文件,我只想检索字段的一个子集。我在互联网上找到的方法是使用@JacksonFilter,即用@JsonFilter 注释POJO,并在序列化时使用该过滤器名称。
下面是代码示例
@JsonFilter("myfilter")
class Resource1{
String firstName;
String lastName;
Address address;
}
class Address {
String addr1;
String addr2;
String zipcode;
}
在序列化时,如果我只想要名字,我会这样做
SimpleFilterProvider filterProvider = SimpleFilterProvider()
filterProvider.addFilter("myfilter",
SimpleBeanPropertyFilter.filterOutAllExcept("firstName"))
ObjectMapper mapper = ObjectMapper()
mapper.setFilterProvider(filterProvider)
mapper.writeValueAsString(resource1_instance) // Resource 1 instance
现在例如,我想过滤另一个 POJO,我需要为给定的类声明 JsonFilter,并且对于任何给定的 POJO 重复此操作。
我担心的是,为了仅动态序列化字段的子集,对于每个给定的 POJO,我们需要添加 @JsonFilter("suitable_name") 并对其进行序列化。
有没有办法声明一个通用的 @JsonFilter 并像继承概念一样重用它。
如果我使用@JsonIgnore,那将是静态且固定的。
我的要求是,如果模型具有 v、w、x、y、z 属性,并且我在运行时仅请求 x、y 属性,那么通用过滤器将仅序列化 POJO 的 x、y 属性并返回给我
对此的任何建议都会有很大帮助。提前致谢
解决方案
对于更简单用例的动态过滤,我为杰克逊编写了一个插件以使用 antpath 样式过滤。它应该正是您搜索的内容。
推荐阅读
- flutter - 断言失败:布尔表达式不能为空:颤振
- reactjs - 如何遍历包含常量数组的文件
- javascript - 如何使用 ajax 处理分页中的页面链接?
- xcode - 如何从 appstoreconnect 获取 dSYM 文件?
- docker - 如何过滤“docker inspect”输出以便只显示某些标签:值对?
- ruby-on-rails - 从收藏中随机获取 9 张照片
- html - 当单击第一个 div 中的集合名称时,如何在第二个 div 中显示集合页面列表?(杰基尔)
- r - 在 R 中使用 dplyr 进行反向编码
- reactjs - 如何测试使用反应测试库渲染的反应组件的道具的价值
- faunadb - FaunaDB 查询多个字段