2016-02-26 99 views
3

由于功能要求,我正在开发一个Web API,我想添加对所有媒体类型的支持。我已经尝试在课程级别和方法级别提供@consumes("*/(")。但是,当我尝试访问我的api时,application/json媒体类型为Content-Type标题,但它不适用于我。JAX-RS使用@consume注解支持所有媒体类型

我已经看过@consumes注释的实现,其默认值是*/*,所以我试图仅使用这个注释作为@consumes,所以它可以添加默认值,但那不起作用。 暂且我用这个注释作为

@Consumes({"application/*","text/*"}) 

它允许客户端与这两种媒体类型组的所有可能的媒体类型的访问我的API。但如果客户端发送请求multipart/signed或任何其他媒体类型,它仍然搞砸了。

+0

要说一个端点可以处理_any_类型,就是说你有一个提供程序配置为处理每种类型。泽西岛不能这样做。它支持JSON,XML,多部分等通用类型,但即使这些类型(除XML的默认支持外)也需要进行配置(通常通过添加支持库并注册它们)。最好的做法是不支持任何类型,即'*/*',并且只使用那些你知道你配置了支持的类型。 –

+0

查看[第8章和第9章](https://jersey.java.net/documentation/latest/index.html),以更好地了解提供者是什么,Jersey支持不同的媒体类型。 –

+0

是的,我想'*/*'为我工作。但它不起作用。如果我根本不使用@consumes注释,那么它再次给我例外。 –

回答

0

您应该不要在您的资源类或方法上使用@Consume批注来使用所有媒体类型。

从规格,第3.5章,声明媒体类型能力:

应用类可以声明所支持的请求和响应分别使用@Consumes和@Produces注解 媒体类型。这些注释可以应用于资源方法, 资源类或实体提供者(请参阅第4.2.3节)。在资源方法上使用 这些注释会覆盖资源 类中的任何资源或方法参数或返回类型的实体提供程序上的任何资源。 如果没有这些注释,则支持任何媒体 类型(“*/*”)假定为