Jersey 如何抓住泽西406不可接受

Jersey 如何抓住泽西406不可接受,jersey,Jersey,当客户端请求不可接受的MIME类型时,如何防止Jersey在客户端喷出HTML页面?我想使用异常apper,但我不确定捕获什么异常,或者这是否是处理406的最佳方法 谢谢 您可以控制客户端吗 您的客户端接受MIME类型列表。如果您的服务器无法生成请求的MIME类型,那么返回406HTTP是有意义的。您还希望服务器做什么 如果您知道客户端请求的MIME类型,并且服务器端的方法能够生成请求的类型,那么您可以修改@products注释以允许服务器提供所需的内容 编辑:我手头没有一个简单的解决方案(可能

当客户端请求不可接受的MIME类型时,如何防止Jersey在客户端喷出HTML页面?我想使用
异常apper
,但我不确定捕获什么异常,或者这是否是处理406的最佳方法


谢谢

您可以控制客户端吗

您的客户端接受MIME类型列表。如果您的服务器无法生成请求的MIME类型,那么返回406HTTP是有意义的。您还希望服务器做什么

如果您知道客户端请求的MIME类型,并且服务器端的方法能够生成请求的类型,那么您可以修改@products注释以允许服务器提供所需的内容

编辑:我手头没有一个简单的解决方案(可能涉及ContainerRequestFilter),但是如果您使用tomcat,可能您可以非常简单地使用它,但是可以设置一个自定义的错误页面,并提供一个简单的内容

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

406
随便你

我同意-我想退回406。我不想要的是大量的HTML——我只想返回一个错误代码,也许还有一条自定义消息。我想问的是:定制406的响应格式的最佳方式是什么?
ExceptionMapper
?我看到较新版本的JAX-RS(2.0)有一个新的特性。我编辑了答案,没有真正的解决方案,但有一个可能的解决办法,而不是说……我没有想到这一点。这是一个API,因此对于大多数响应,我们都会返回一个错误代码,其中包含更多信息,但对于406,这实际上可以很好地工作。另一种方法是接受所有MIME类型,并使用@Context final HttpServletRequest获取httpRequest并手动检查接受列表。但当你绕过泽西岛一个非常有趣的特征时,情况可能更糟。