【发布时间】:2016-02-26 09:34:17
【问题描述】:
由于功能要求,我正在开发一个 Web API,我想在其中添加对所有媒体类型的支持。我也尝试在类级别和方法级别提供@consumes("*/(")。但是当我尝试在Content-Type 标头中使用application/json 媒体类型访问我的api 时,它对我不起作用。
我查看了@consumes 注释的实现,其中它的默认值为*/*,所以我尝试将此注释用作@consumes,以便它可以添加默认值,但效果不佳.
暂时我用这个注释作为
@Consumes({"application/*","text/*"})
它允许客户端使用来自这些媒体类型组的所有可能的媒体类型访问我的 API。但是,如果客户端使用multipart/signed 或任何其他媒体类型发送请求,它仍然会搞砸。
【问题讨论】:
-
说一个端点可以处理 any 类型,就是说您有一个配置为处理各种类型的提供程序。泽西岛不能这样做。它对 JSON、XML、multipart 等常见类型具有支持,但即使是那些(除了对 XML 的默认支持),它们仍然需要配置(通常通过添加支持库并注册它们)。最好的办法不支持任何类型,即
*/*,并且只使用那些你知道你已经配置支持的类型。 -
查看 chapter 8 and 9 以更好地了解提供商是什么,以及 Jersey 对不同媒体类型的支持。
-
是的,我希望
*/*为我工作。但它不起作用。如果我根本不使用@consumes 注释,那么它又会给我一个例外。 -
请重新阅读我的评论,以及我提供的链接。仅仅因为您使用
*/*,并不意味着您的应用程序可以支持它。您需要提供程序来处理您在 @Consumes 注释中宣传支持的每个单独的类型 -
明白了!感谢您的回复。
标签: java rest jax-rs jersey-2.0