我正在尝试使用StreamListener注释和条件属性来创建使用者。但是,出现以下异常:
org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[java.lang.Integer]的值“ test”;嵌套的异常为java.lang.NumberFormatException:对于输入字符串:“ test”
TestListener:
@StreamListener(target=ITestSink.CHANNEL_NAME,condition="payload['test'] == 'test'")
public void test(@Payload TestObj message) {
log.info("message is {}",message.getName());
}
TestObj:
@Data
@ToString(callSuper=true)
public class TestObj {
@JsonProperty("test")
private String test;
@JsonProperty("name")
private String name;
}
有人可以协助解决这个问题吗?
答案 0 :(得分:0)
根据您显示的内容,它应该可以工作。我建议您删除条件,然后将断点设置为调试。然后,您应该能够知道哪种实际类型。
答案 1 :(得分:0)
消息的有效负载尚未从有线格式(byte [])转换为所需的类型。换句话说,它尚未经过内容类型协商中描述的类型转换过程。
因此,除非您使用SPeL表达式来评估原始数据(例如,字节数组中第一个字节的值),否则请使用基于消息标头的表达式(例如condition =“ headers ['type'] = ='dog'“)。
示例:
@StreamListener(target = Sink.INPUT, condition = "headers['type']=='bogey'")
public void receiveBogey(@Payload BogeyPojo bogeyPojo) {
// handle the message
}