我有一个基于Spring和RESTEasy的(JSON)基于REST的应用程序。我们要求限制作为服务输入接受的字符集。在反序列化期间或之后,我可以将限制应用于POJO本身,但是当它读取JSON流时,将某种过滤器插入到Jackson解析中似乎更有效,因为它&# 39;显然,无论如何都要检查每个角色。
问题是,杰克逊是否提供插件点来做到这一点?能够让我在可以验证每个属性值的每个字符的时候装饰或覆盖低级解析的东西是有效的(即,根据应用程序要求在特定集合中)。
答案 0 :(得分:2)
如果您指的是JSON字符串值中允许的字符,否则当前没有过滤器或转换器功能。你可以考虑实现JsonParserDelegate
,它可以拦截对getText()
的调用,但这可能不是一个非常干净的机制。或者,您可以先将内容读取为树(JsonNode
),遍历它并清理String值;并且仅在此之后使用ObjectMapper.convertValue(fromNode, MyType.class)
进行数据绑定。
在RESTEasy的上下文中,您可以通过扩展JsonParserDelegate
并覆盖MappingJsonFactory
方法来注入自定义_createJsonParser(...)
以返回自定义委托。然后实现对JacksonJsonProvider
(Jackson的JAX-RS提供程序)的扩展,该扩展在其构造函数中使用您的自定义工厂创建ObjectMapper
。可以在this answer to a related question中找到此示例。