Spring Cloud Stream:JSON 数组无法转换为 POJO 列表
Spring Cloud Stream: JSON array cannot be cast to POJO list
我正在对 Spring Cloud Stream 的 内容类型自动转换 进行一些测试。
如 spring-cloud-stream Guide 所示。 GreetingMessage
({"greeting":"Hello, world"}
)的json格式在[=16=中消费时会自动转换为POJOGreetingMessage
对象].测试成功。
但是,当我将输出更改为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);
}
}
这是消息转换过程的限制,其中不考虑参数化类型(仅考虑原始 List
类型)。如果您认为需要支持,请提出问题 GitHub。
我正在对 Spring Cloud Stream 的 内容类型自动转换 进行一些测试。
如 spring-cloud-stream Guide 所示。 GreetingMessage
({"greeting":"Hello, world"}
)的json格式在[=16=中消费时会自动转换为POJOGreetingMessage
对象].测试成功。
但是,当我将输出更改为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);
}
}
这是消息转换过程的限制,其中不考虑参数化类型(仅考虑原始 List
类型)。如果您认为需要支持,请提出问题 GitHub。