Установить 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);
}