【问题标题】:Disable Jersey Provider per request根据请求禁用 Jersey Provider
【发布时间】:2012-06-10 22:22:50
【问题描述】:

目前我已经注册了一个Gson Provider,它是正确的 每当我的请求消耗或生成 json 时使用。

问题是我有一个需要 Post 数据的请求 byte[], InputStream, Reader, or String

我需要“原始”数据的原因是我有一些第三方代码 它希望自己进行反序列化。

无论我指定我的 Post 方法期望的这四种类型中的哪一种, GsonReader 会抱怨,这是正确的。

应为字符串,但为 BEGIN_OBJECT

根据类型会有不同的错误,但这一切都归结为 事实上我不希望这个 Provider/MessageBodyReader 运行。

另外,我无法控制已发布数据的 Accept 和 Content-type 标头。 它们将是 application/json。

【问题讨论】:

    标签: java jersey gson jsr311


    【解决方案1】:

    您可以在过滤器中“修改”请求的接受/内容类型标头。因此,如果有任何方法可以识别出对于此请求,您不想使用 GSON,则可以编写一个修改标头的 ContanerRequestFilter。

    如果使用 GSON 提供程序取决于请求匹配的方法,您可以实现 ResourceFilterFactory 应用(返回)ContainerRequestFilter(将内容类型标头修改为 json 以外的其他内容)仅适用于适用的方法(您可以甚至引入一个自定义注解,用它注解这样的方法,并且只有在传递给它的方法使用该注解注解时,resourcefilterfactory 才返回 containerrequestfilter。

    以下是相关链接:

    【讨论】:

    • 我喜欢这个解决方案。在此之前,我选择简单地覆盖 GsonProvider 以不对 Reader Types 进行反序列化。您的解决方案更简洁,可能在语义上更正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多