2013-02-24 87 views
3

如何防止Jersey在客戶端請求不可接受的MIME類型時在客戶端噴出HTML頁面?我想使用ExceptionMapper,但我不確定要捕捉什麼異常,或者這是處理406的最佳方式。如何捕獲Jersey 406不可接受

謝謝!

回答

1

你對客戶端有控制嗎?

您的客戶端接受一個MIME類型列表。如果您的服務器不能產生請求的MIME類型,那麼返回406 HTTP是有意義的。你還想要服務器做什麼?

如果您知道客戶端請求的MIME類型,並且如果服務器端的方法能夠生成請求的類型,則可以修改@Produces註釋以允許服務器提供所需的內容。

編輯:我沒有一個簡單的解決方案(可能涉及ContainerRequestFilter)在手,但也許你可以有這個非常簡單,如果你使用Tomcat,但設置自定義錯誤頁,有一個簡單的內容

<error-page> 
    <error-code>406</error-code> 
    <location>whatever you want</location> 
</error-page> 
+0

我同意 - 我*希望*返回一個406.我不想要的是一個HTML的 - 我只想返回一個錯誤代碼,也許是一個自定義消息。我問的是:什麼是自定義響應格式爲406..'ExceptionMapper'的最佳方式?我發現新版本的JAX-RS(2.0)有一個['NotAcceptableException'](http://jax-rs-spec.java.net/nonav/2.0-SNAPSHOT/apidocs/javax/ws/rs/NotAcceptableException。 HTML)。沒有看到任何與1.x相同的東西。 – maxenglander 2013-02-26 16:32:14

+0

我編輯了答案,沒有真正的解決方案,但是可能的替代方法 – 2013-02-26 17:05:12

+0

嗯..沒有想到這一點。這是一個API,因此對於大多數響應,我們會返回錯誤代碼並提供更多信息,但對於406這實際上可以很好地工作。將嘗試一下。 – maxenglander 2013-02-26 17:16:06