Установить HTTP-код на исключение с помощью Camel и Restlet

Используя компонент Restlet в проекте Apache Camel, я не могу установить код состояния HTTP для ответа в onException,

Посмотрите на верблюда RouteBuilder настроен так:

onException(Exception.class)
  .handled(true)
  .process(new FailureResponseProcessor());

from("restlet:http://example.com/foo")
  .process(fooProcessor)
  .to("file:data/outbox");

в FailureResponseProcessor Я пытаюсь установить код ответа HTTP для Restlet:

public void process(Exchange exchange) throws Exception {
  Response response = exchange.getIn()
                              .getHeader(RestletConstants.RESTLET_RESPONSE,
                                         Response.class);
    response.setStatus(Status.SERVER_ERROR_INTERNAL);
}

Это не работает. Статус ответа HTTP всегда 200 OK,

Что необходимо для эффективной установки кода состояния HTTP?

2 ответа

Решение

Здесь вы просто извлекаете объект ответа и меняете его. Это не распространяется вниз по маршруту. Вам нужно установить заголовок после изменения объекта.

exchange.getIn().setHeader(RestletConstants.RESTLET_RESPONSE, response);

Благодарю.

Вы можете принудительно ввести код состояния для своего исключения, установив

      .onException(MyException.class).process(SetFailureResponse::new).handled(true)

и в отдельном наборе классов SetFailureResponse

      @Override
    public void process(Exchange exchange) throws Exception {
        exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE,400);
    }
Другие вопросы по тегам