2013-02-24 88 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