2015-04-24 37 views
0

假設我有兩個端點看起來像這樣的:基於Accept頭進行Jersey端點仲裁:什麼時候沒有給出Accept頭?

@GET 
@Path("/blah") 
@Produces(MIME_TYPE_1) 
public Thing getThing() { 
    .... 
} 

@GET 
@Path("/blah") 
@Produces(MIME_TYPE_2) 
public OtherThing getOtherThing() { 
    .... 
} 

這都非常好,系統會根據該Accept頭客戶端發送這些方法調用仲裁。

我遇到的問題是,如果客戶端完全沒有關閉Accept頭,我(出於某種原因)得到第二個方法被調用,我希望它是第一個。

還有一個額外的複雜因素,那就是它會自動提供到Swagger文檔中,而且我不希望在文檔中出現額外的MIME類型,所以我不想(例如)將*/*添加到第一種方法接受的類型。

(這是使用Dropwizard和澤西1.x中,雖然我聽到基於新澤西2.x的解決方案仍然感興趣,這是我們可能很久以前升級。)

+0

您_might_能夠過濾請求和修改'Accept'頭澤西查詢之前。我認爲它不適用於'ContainerRequestFilter',但它可能與'ServletFilter'一起使用。 – condit

回答

0

嘗試使用的品質因數參數在@Produces註釋:

@GET 
@Path("/blah") 
@Produces("application/json; q=0.6") 
public Thing getThing() { 
.... 
} 

@GET 
@Path("/blah") 
@Produces("application/xml; q=1") 
public OtherThing getOtherThing() { 
.... 
} 

如果客戶端不發送「接受:」在請求頭,Web服務器將執行getOtherThing(),因爲它具有比getThing()更高質量的因素。

免責聲明:這與RestEasy,但我不能保證它將與澤西工作。

品質因數參數是RFC 2616 (14.1)
部分你可以找到有關該功能的詳細信息在RestEasy的here

相關問題