java - Spring中使用JsonFilter动态序列化

标签 java spring spring-boot serialization pojo

我正在尝试在 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 样式过滤。它应该正是您搜索的内容。

https://github.com/Antibrumm/jackson-antpathfilter

关于java - Spring中使用JsonFilter动态序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57635893/

相关文章:

java - 当我尝试使用 anchor 标记从 jsp 页面调用 servlet 页面时,它显示错误

java - Hibernate 和 Spring - 道,服务

java - 创建一个 View 类,它是两个 Android View 的组合

java - Spring 框架 - 与旧 Java web 应用程序集成

java - Spring中的日期时间格式

java - Spring/Hibernate 连接泄漏与 ScrollableResults

java - 不使用 Http-Authentication 在 Apache Jersey 中进行身份验证?

java - 从 PropertySource 访问 Spring 属性

java - Spring 1.5.9 升级到 2.0.1 后出现错误 : cannot find symbol Logger logger = Logger. getLogger(this.getClass().getName())

java - 如何避免Springboot Camel Route每天在特定时间挂断信号而关闭