我正在尝试在 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 = new SimpleFilterProvider();
filterProvider.addFilter("myfilter", SimpleBeanPropertyFilter.filterOutAllExcept("firstName"));
ObjectMapper mapper = new 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 属性并返回给我
对此的任何建议都会有很大帮助。提前致谢
最佳答案
为了对更简单的用例进行动态过滤,我为 jackson 编写了一个插件来使用 antpath 样式过滤。它应该正是您搜索的内容。
关于java - Spring中使用JsonFilter动态序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57635893/