Как я могу сохранить заголовки запроса в ответе об ошибке, подготовленном через JAX-RS (реализация Apache-CXF) ExceptionMapper

Я реализую JAX-RS, используя apache CXF. Я создал ExceptionMapper для обработки таких плохих запросов:

    public class ClientErrorExceptionMapper implements ExceptionMapper<ClientErrorException> {

    @Override
    public Response toResponse(final ClientErrorException exception) {
        return Response.status(Response.Status.BAD_REQUEST).entity("Invalid request: Invalid URI.").build();

    }

}

Я не уверен, как это работает внутри, но я полагаю, что фреймворк выдаст исключение в случае, если пользователь делает недопустимый запрос, и этот обработчик подготовит сообщение об ошибке для отправки обратно. Моя проблема в том, что я хочу сохранить некоторые пользовательские заголовки, которые пользователь отправляет в запросе, чтобы я отправил их обратно с ответом. Но, используя этот сопоставитель исключений, я не вижу возможности получить исходные заголовки запроса. Я могу установить любой новый заголовок в ответе, но я хочу сохранить заголовки запроса — как в обычном запросе. Итак, есть ли способ в JAX-RS, где я могу сохранить или эффективно ссылаться на пользовательские заголовки в текущем запросе?


person ishan    schedule 09.10.2015    source источник


Ответы (1)


Мы прибегли к использованию локальной переменной потока для сохранения RequestContext при поступлении запроса, а затем в ExceptionMapper мы можем получить конкретную информацию о запросе.

Некрасиво, но это работает. Я думаю, у нас есть общий фильтр в списке фильтров, который улавливает все запросы перед отправкой.

person David Morris    schedule 21.01.2017