由於類型擦除,有效負載類型路由器當前不支持泛型類型 - 將有效負載類名稱(java.util.List
)與您配置的字符串進行比較。我們可以通過解析字符串來處理類似的簡單類型,也可以使用ParameterizedTypeReference
和Java配置來處理更復雜的泛型類型。但是今天沒有這樣的支持。
隨意打開JIRA Issue,我們會考慮將來的增強功能。
即使有這樣的支持,你的語法也不好; java.util.list
應該是java.util.List
和<
應該是<
。
您的字符串永遠不會匹配有效內容類型的類名(使用已擦除的泛型);這就是爲什麼所有消息都會進入默認頻道。
同時,您可以創建一個簡單的POJO路由器方法,檢查列表中的對象並返回相應的通道名稱。
編輯
這裏是一個POJO路由器啓動的應用程序:
@SpringBootApplication
public class So41324522Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(So41324522Application.class, args);
MessageChannel channel = context.getBean("routingChannel", MessageChannel.class);
channel.send(new GenericMessage<>(Collections.singletonList("Foo")));
channel.send(new GenericMessage<>(Collections.singletonList(42)));
context.close();
}
@Router(inputChannel = "routingChannel")
public String route(List<Object> payload) {
if (payload.size() == 0) {
return null;
}
if (payload.get(0) instanceof Integer) {
return "integerChannel";
}
else {
return "stringChannel";
}
}
@ServiceActivator(inputChannel = "integerChannel")
public void handleInt(List<Integer> in) {
System.out.println("INT: " + in);
}
@ServiceActivator(inputChannel = "stringChannel")
public void handleStr(List<String> in) {
System.out.println("STR: " + in);
}
}
感謝您的快速反應。對於語法來說,這只是這個論壇上的錯字。對不起。 – Vivek