2014-10-29 3 views
4

Я разрабатываю услуги REST с использованием верблюда REST-DSL [in camel documentation]. Я успешно отправил запрос JSON для счастливого пути и получил ответ на одно и то же использование (Rest-DSL и верблюжковый сервлет) сочетание. Теперь, когда мы продвигаемся вперед, клиент может отправить запрос службы Restore с недопустимыми значениями или недопустимым действительным запросом, теперь я ищу способы отправить код статуса 400 в качестве ответа от REST DSL, когда запрос недействителен.Отправка Camel rest-dsl 400 Коды состояния

Просьба сообщить, как это достичь.

+0

Вы хотите сделать некоторую обработку, а затем на основании этого вам нужно отправить недействительный ответ? если да, тогда будет работать форма ответа Пьер-Албан. Или вам нужно отправить недействительный ответ при возникновении определенного сценария ошибки? –

+0

правильный Naveen, поэтому я буду проверять ввод, а затем, если проверка не удалась, мне нужно отправить ответ на код состояния 400. –

ответ

5

Я предполагаю, что вы выполняете свою проверку в пользовательском процессоре или что-то подобное. Если вы хотите отправить код ошибки HTTP, просто добавьте заголовок Exchange.HTTP_RESPONSE_CODE.

Например: exchange.getIn(). SetHeader (Exchange.HTTP_RESPONSE_CODE, 400);

Поведение может зависеть от используемого вами двигателя. Как говорит документация, он должен работать с сервлетов:

+0

Спасибо, отлично работает! Одно из наблюдений заключается в том, что мы должны избегать любых исключений, которые могут возникнуть, как если бы я получал исключение, Camel Servlet отправляет 500 кодов статуса - учет ошибки внутреннего сервера. –

+2

Я думаю, вы могли бы использовать стратегию исключения и изменять заголовки для других кодов состояния и ответа, если это необходимо. –

3

Как предложил Пьер-Альбан вы можете проверить полезную нагрузку в процессор или классу обслуживания и установить правильный код ответа и сообщение в процессоре.

Другой способ - исключить исключение из метода валидатора и позволить построителю маршрута обрабатывать это исключение. Что-то вроде этого -

OnException (ValidationException.class) .handled (истина)
.setHeader (Exchange.HTTP_RESPONSE_CODE, постоянная (400)) .setHeader (Exchange.CONTENT_TYPE, константа ("текст/обычный")) .setBody (exceptionMessage());