我试图使用一个拦截器来内省和更改后端发生的异常。拦截器看起来像这样:
public class ApplicationErrorInterceptor {
private static final Logger LOGGER = Logger.getLogger(ApplicationErrorInterceptor.class);
@AroundInvoke
public Object handleException(InvocationContext context) {
try {
return context.proceed();
} catch (Exception ex) {
LOGGER.errorf(ex, "An unhandled exception occured!");
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity("some custom 500 error text")
.build();
}
}
}
@Path("/somepath")
@Interceptors({ApplicationErrorInterceptor.class})
public interface SomeRestService {
@POST
@Path("getResponse")
Response getResponse();
@POST
@Path("getVoid")
void getVoid();
}
假设这两个方法的实现都抛出异常。我希望在这两种情况下,都将异常映射到一个500服务器错误和提供的自定义消息。不幸的是,返回void的方法将映射到204 No Content响应。如果我完全删除拦截器,将发生默认的500服务器错误,这至少是正确的状态代码,但我丢失了错误自定义