如何将低级字符过滤器应用于 Jackson JSON 解析?

How to apply low-level character filter to Jackson JSON parsing?

我有一个 (JSON) 基于 Spring 和 RESTEasy 的基于 REST 的应用程序。我们需要限制接受为服务输入的字符集。我 可以 在反序列化期间或之后将限制应用于 POJO 本身,但是在读取 JSON 流时将某种过滤器插入 Jackson 解析中似乎更有效,因为它显然会在某个时候检查每个字符。

问题是,Jackson 是否提供插件点来执行此操作?使我能够在这样的时候装饰或覆盖低级解析的东西,以便我可以验证每个 属性 值的每个字符是否有效(即,在根据应用程序要求的特定集合中)。

如果你的意思是 JSON 字符串值中允许的字符,不,目前没有过滤器或转换器功能。您可以考虑实现 JsonParserDelegate,它可以拦截对 getText() 的调用,但这可能不是很干净的机制。或者,您可以先将内容作为树 (JsonNode) 读取,遍历它并清理字符串值;只有在那之后使用 ObjectMapper.convertValue(fromNode, MyType.class).

进行数据绑定

在 RESTEasy 的上下文中,您可以通过扩展 MappingJsonFactory 并将 _createJsonParser(...) 方法覆盖到 return 自定义委托来注入自定义 JsonParserDelegate。然后实现 JacksonJsonProvider(Jackson 的 JAX-RS 提供程序)的扩展,在其构造函数中使用您的自定义工厂创建 ObjectMapper。可以在 this answer to a related question.

中找到这方面的示例