我编写了一个简单的自定义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
。有人有想法吗?
答案 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。