Jersey 我可以访问jackson BeanSerializerModifier中的请求参数吗?

Jersey 我可以访问jackson BeanSerializerModifier中的请求参数吗?,jersey,jackson,Jersey,Jackson,我正在使用Jersey实现RESTAPI,并使用Jackson提供JSON支持。我试图在通过重写方法进行序列化之前删除某些属性 但删除属性将基于查询参数。在我的实现中有没有办法访问查询参数?使用BeanSerializerModifier本身会变得复杂,因为在第一次调用JsonSerializer时,该方法只调用一次。至于传递查询参数,您可以使用上下文属性和ObjectWriter(由ObjectMapper构造)传递它们,但这意味着要从Jersey接管相当多的序列化自动化 有一种机制可能有助于

我正在使用Jersey实现RESTAPI,并使用Jackson提供JSON支持。我试图在通过重写方法进行序列化之前删除某些属性


但删除属性将基于查询参数。在我的实现中有没有办法访问查询参数?

使用
BeanSerializerModifier
本身会变得复杂,因为在第一次调用
JsonSerializer
时,该方法只调用一次。至于传递查询参数,您可以使用上下文属性和
ObjectWriter
(由
ObjectMapper
构造)传递它们,但这意味着要从Jersey接管相当多的序列化自动化


有一种机制可能有助于在不接管整个过程的情况下修改序列化方面:使用
ObjectWriterModifier
,注册
ObjectWriterInputer
。这些是Jackson JAX-RS提供程序的一部分,添加在Jackson 2.3中。不知道更多的细节,我不知道这有多容易;部分问题在于查询参数更多的是输入端的东西,因此无法从输出处理端直接访问它们。

您使用的是什么Jersey版本?我使用的是Jersey 2.6。我可以使用ThreadLocal向外部资源共享查询参数信息吗?如果您可以切换到更高版本(不确定,2.17或2.19),则Jackson支持。它支持使用查询参数进行筛选。。我们评估了实体数据过滤特性和一些支持JAR的特性需要JDK1.7,出于某种原因,我们需要坚持使用JDK1.6。所以我们排除了这个选项。实体过滤从2.3开始就可用,但最初它只支持MOXy。如果您查看文档的底部,就会发现它是可扩展的。Jersey稍后将使用此扩展性为Jackson提供支持。如果您想尝试将自己合并到2.6Thanks中,可以查看在更高版本中实现此功能的步骤。但我使用的是Jackson 2.2:(嗨,我试图理解BeanSerializerModifier的行为,因此在序列化对象创建期间将首次调用BeanSerializerModifier,并且将缓存该对象。对于后续请求,将不创建该对象(将从缓存提供服务)所以不会调用BeanSerializerModifier?非常感谢。@Mkm正确。只有您构造的序列化程序会在初始调用后被调用。谢谢。这就是我在实现中发现的,基本上我保留了更改BeanSerializerModifier内属性的逻辑。changeProperties()我认为这将在序列化之前一直被调用。现在我已将我的实现更改为如下,现在我已将我的实现更改为以下公共类CustomBeanPropertyWriter扩展BeanPropertyWriter{私有最终BeanPropertyWriter beanPropertyWriterObj;受保护的CustomBeanPropertyWriter(最终BeanPropertyWriter base){super(base);this.beanPropertyWriterObj=base;}@Override public void serializeAsField(最终对象bean,最终JsonGenerator jgen,最终SerializerProvider)引发异常{if(此属性可以序列化){super.serializeAsField(bean,jgen,prov);}