JAX-RS ExceptionMapper捕获除401之外的所有内容

时间:2016-09-09 05:28:06

标签: jax-rs wildfly

我编写了一个简单的自定义ExceptionMapper,用于在未捕获的异常情况下提供良好的响应:

@Provider
public class CustomExceptionMapper implements ExceptionMapper<Throwable> {

    @Override
    public Response toResponse(Throwable t) {
        if (t instanceof WebApplicationException) {
            WebApplicationException webEx = (WebApplicationException)t;
            return webEx.getResponse();
        } else {
            return ResponseHelper.INTERNAL_SERVER_ERROR;
        }
    }

}

这是完美的,除了401之外,所有异常(404,415,...)都被捕获。我的REST客户端中也没有响应代码只有纯文本响应:Authentication Failed

我的目的是返回正确的回复,并删除以某种方式发送的WWW-Authenticate。有人有想法吗?

1 个答案:

答案 0 :(得分:2)

请参阅JavaDoc

  

实现ExceptionMapper合同的提供者必须以编程方式在JAX-RS运行时中注册,或者必须使用@Provider注释进行注释,以便在提供者扫描阶段由JAX-RS运行时自动发现。 / p>

它是JAX-RS运行时的一部分,只能捕获JAX-RS运行时中抛出的异常。

但是你的HTTP 401被抛入你的容器中。在这种情况下,您可以向web.xml添加error-page,请参阅https://stackoverflow.com/a/26429261/5277820