我正在对Spring Cloud Stream的内容类型自动转换进行一些测试。
正如spring-cloud-stream Guide所示。当GreetingMessage
消耗时,{"greeting":"Hello, world"}
(GreetingMessage
)的json格式将自动转换为 POJO @StreamListener
对象。这次测试成功。
但是,当我将输出更改为List<GreetingMessage > [{"greeting":"Hello, world"}, {"greeting":"Good morning"}]
时,输入 将不会强制转换它是 POJO List<GreetingMessage >
个对象,但是 POJO List<String>
。
所以我的问题是:
代码:
@Data
@AllArgsConstructor
public class GreetingMessage {
private String greeting;
}
@EnableBinding(Source.class)
public class GreetingSource {
@Bean
@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))
public MessageSource<List<GreetingMessage>> greeting() {
return new MessageSource<List<GreetingMessage>>() {
public Message<List<GreetingMessage>> receive() {
return new GenericMessage(Arrays.asList(new GreetingMessage("hello"), new GreetingMessage("hello2")));
}
};
}
}
@EnableBinding(Sink.class)
public class GreetingSink {
@StreamListener(Sink.INPUT)
public void receive(Message<List<GreetingMessage>> msg) {
// handle GreetingMessage
System.out.println(msg);
}
}
答案 0 :(得分:1)
这是消息转换过程的限制,其中不考虑参数化类型(仅原始List
类型)。如果您认为需要支持,请打开GitHub问题。