Я пытаюсь использовать перехватчик для самоанализа и изменения исключений, возникающих в бэкэнде. Перехватчик выглядит примерно так:
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 по умолчанию, которая является по крайней мере правильным кодом состояния, но я потерял настройку ошибки