2015-02-16 10 views
1

Я пытаюсь создать сервер SpringBoot Rest с интеграцией Spring с HTTP -> inboundGateway.Spring Integration Http с Spring Boot и @RequestMapping

Я контроллер, с аннотацией "@Controller" и "@RequestMapping" и попытаться создать следующий поток:

GET запрос "/" -> Channel: httpRequestChannel -> Run IndexController -> Источник: httpReplyChannel -> back to Browser

Но это не работает.

Мои Интеграция Xml:

<int:channel id="httpRequestChannel"> 
    <int:interceptors> 
    <int:wire-tap channel="logHttpRequestChannel" /> 
    </int:interceptors> 
</int:channel> 

<int:channel id="httpReplyChannel"> 
    <int:interceptors> 
    <int:wire-tap channel="logHttpReplyChannel" /> 
    </int:interceptors> 
</int:channel> 

<int:logging-channel-adapter id="logHttpRequestChannel" level="INFO" logger-name="httpRequestChannel" log-full-message="true" /> 

<int:logging-channel-adapter id="logHttpReplyChannel" level="INFO" logger-name="httpReplyChannel" log-full-message="true" /> 

<int-http:inbound-gateway id="inboundGateway" 
    request-channel="httpRequestChannel" reply-channel="httpReplyChannel" 
    auto-startup="true" supported-methods="GET" path="/"> 
    <int-http:request-mapping produces="application/json" /> 
</int-http:inbound-gateway> 

Ошибка:

Dispatcher has no subscribers 

Но на мой взгляд, контроллер должен быть абонентом через RequestMapping Annotation ...

я загрузить образец проекта github: https://github.com/marcelalburg/spring-boot-integration-rest-server

Спасибо за внимание. LP Марсель

UPDATE

Здравствуйте,

я вижу что-то в документации:

Синтаксический анализ HTTP шлюза входящего или адаптера HTTP входящего канала регистрирует integrationRequestMappingHandlerMapping боб типа IntegrationRequestMappingHandlerMapping, если он еще не зарегистрирован. Эта конкретная реализация HandlerMapping делегирует свою логику в RequestMappingInfoHandlerMapping. Реализация обеспечивает аналогичную функциональность, такую ​​же, как и в org.springframework.web.bind.annotation.RequestMapping аннотации в Spring MVC.

Итак, я изменил следующее:

<int-http:inbound-gateway id="indexGateway" 
    request-channel="httpRequestChannel" reply-channel="httpReplyChannel" 
    auto-startup="true" supported-methods="GET" path="/, /test" reply-timeout="100" /> 

и мой контроллер

@ServiceActivator(inputChannel = "httpRequestChannel", outputChannel = "httpReplyChannel") 
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") 
public String testGateway(LinkedMultiValueMap payload, @Headers Map<String, Object> headerMap) 
{ 
    // IntegrationRequestMappingHandlerMapping 

    System.out.println("Starting process the message [reciveing]"); 

    return "{HelloMessage: \"Hello\"}"; 
} 

@ServiceActivator(inputChannel = "httpRequestChannel", outputChannel = "httpReplyChannel") 
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = "application/json") 
public String testGateway2(LinkedMultiValueMap payload, @Headers Map<String, Object> headerMap) 
{ 
    // IntegrationRequestMappingHandlerMapping 

    System.out.println("Starting process the message [reciveing]"); 

    return "{HelloMessage: \"Test\"}"; 
} 

теперь я получаю ответ, но он возвращает рандомизированное "Тест" и "Привет" ...

Thanks

+0

или у кого-нибудь рабочая интеграция http-проекта интеграции без web.xml (возможно, с весенней загрузкой), какой из них работает как сервер REST? –

+0

И не представляется возможным создать канал для каждого метода отдыха –

ответ

2

Нет; у вас, похоже, есть основное недоразумение.

С Spring интеграции, входящий шлюз заменяет на @Controller, и посылает входящий (возможно, преобразованный) объекта в качестве полезной нагрузки сообщени к requestChannel.

Некоторые другие компоненты (а не контроллер) подписываются на этот канал для приема сообщения.

Итак, вместо настройки @Controller вы можете настроить POJO как <service-activator input-channel="httpRequestChannel" .../> или аннотировать метод как @ServiceActivator.

Затем оно будет потреблять сообщение и, при желании, отправить ответ на выходной канал (опускание выходного канала приведет к его перенаправлению обратно на шлюз).

См. Пример http sample.

+0

Я так думал! ; (Спасибо, что подтвердили это. –

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