2016-02-26 27 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節)。在資源方法上使用 這些註釋會覆蓋資源 類中的任何資源或方法參數或返回類型的實體提供程序上的任何資源。 如果沒有這些註釋,則支持任何媒體 類型(「*/*」)假定爲