2015-03-20 1 views
2

Мне нужно использовать простой сервис Rest, но их реализация прерывается, если мой запрос отключается с Content-type: application/x-www-form-urlencoded. Мне нужно установить его как «application/json» или столкнутся со статусом 415.Как установить Content-Type на запрос продюсера верблюда?

Я использую компонент производителя пульта, потому что он уже используется повсюду, и до сих пор он попал в сладкое пятно между функциональностью и простотой. Так далеко.

Как бы то ни было, попытка установить заголовок на моем маршруте, похоже, имеет нулевой эффект, а тип содержимого моего запроса остается как application/x-www-form-urlencoded. Вот мой тестовый код:

from("direct:getImg") 
      .setHeader(RestletConstants.RESTLET_LOGIN, simple("admin")) 
      .setHeader(RestletConstants.RESTLET_PASSWORD, simple("admin")) 
      .setHeader(Exchange.CONTENT_TYPE, simple("application/json")) 
      .to("restlet:http://requestb.in/12sowlx1?restletMethod=get&throwExceptionOnFailure=false") 

У меня явно чего-то не хватает, но я не могу найти какой-либо пример. Может ли кто-нибудь указать правильный способ сделать это?

Спасибо!

+0

setHeader (Exchange.CONTENT_TYPE, constant ("application/json")) будет работать. Дайте мне знать ваш результат. –

+0

@NaveenRaj - такой же проблема. Нет эффекта. Вы можете увидеть подробности моего исходящего запроса здесь: http://requestb.in/ugszbsug?inspect (истек срок моего оригинального квеста) –

ответ

2

Вы должны позвонить процессору прежде, чем вы позвоните своему рестлеру и установите тип содержимого в обмене. Что-то вроде этого:

from("direct:getImg").process(new Processor() { 
     @Override 
     public void process(Exchange exchange) throws Exception { 
      exchange.getIn().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_XML); 
     } 
    }).to("restlet:http://requestb.in/12sowlx1?restletMethod=get&throwExceptionOnFailure=false"); 

Я тестировал его, и он работает. Дайте мне знать результат.

+1

Я думаю, что заголовок должен быть установлен в сообщении outbond, то есть нам нужно использовать обмен. getOut(). SetHeader (.......). Редактирование же в комментариях. –

Смежные вопросы