2016-03-07 49 views
2

是否可以指定真正的Java Class作爲Payload Type Router中的密鑰?使用類類型作爲Java中的密鑰DSL有效負載類型路由器

目前,我必須從ClassString手動

... 
.<Object, String>route(p -> p.getClass().getName(), // transform raw payload to mapping string key 
     m -> m.suffix("Channel") 
       // route to path1Channel 
       .channelMapping(Integer.class.getTypeName(), "path1") 
       // route to path2Channel 
       .channelMapping(String.class.getTypeName(), "path2") 
       // route to path3Channel 
       .channelMapping(Doulbe.class.getTypeName(), "path3") 
) 
... 

做皈依但我希望不便不太繁瑣

... 
.<Object, Class>route(p -> p.getClass(), 
     m -> m.suffix("Channel") 
       .channelMapping(Integer.class, "path1") 
       .channelMapping(String.class, "path2") 
       .channelMapping(Doulbe.class, "path3") 
) 
... 

也不像這個

... 
.payloadTypeRouter(
     m -> m.suffix("Channel") 
       .channelMapping(Integer.class, "path1") 
       .channelMapping(String.class, "path2") 
       .channelMapping(Doulbe.class, "path3") 
) 
... 

回答

3

好吧,安德烈,這是不可能的。同意。

這同樣適用於ErrorMessageExceptionTypeRouter

從一方面來看,所有路由器都實現MappingMessageRouterManagement,在這裏你可以看到只有String作爲密鑰是有效的。

從另一個 - 你總是可以配置目標AbstractMessageRouter實施(PayloadTypeRouter)作爲@Bean並從.route() EIP方法引用它。

最後:隨意有助於這些差距:https://github.com/spring-projects/spring-integration-java-dsl/wiki

我會打電話給他們像.payloadTypeRoute().errorRoute()

謝謝你指出了!