我正在尝试使用拦截器来自省和更改后端发生的异常。拦截器看起来像这样:
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服务器错误,至少是正确的状态码,但是我丢失了错误自定义