解决Spring Cloud Stream报Cannot convert from [[B] to [com.zx.server.dto.OrderDTO] for GenericMessage异常

在学习Spring Cloud Stream,用Stream传输对象时,碰到了Cannot convert from [[B] to [com.zx.server.dto.OrderDTO] for GenericMessage 这个异常,但是在之前传输字符串就正常。而且把消费者的参数类型设置为String也正常,一旦设置为OrderDTO就会报错。

   @GetMapping("/sendMessage")
    public void process() {
        OrderDTO orderDTO = new OrderDTO();
        orderDTO.setOrderId("123456");
        client.output().send(MessageBuilder.withPayload(orderDTO).build());
    }
@StreamListener(StreamClient.INPUT)
    public void process(OrderDTO message) {
        log.info("StreamReceiver: {}", message);
    }

经过测试发现在生产者发送这边没有问题,在消费者接收时报的错。初步判断为接收类型有问题,一开始想到了序列化,但是序列化以后仍然有问题,后来在yml配置中找到了问题

spring:
  cloud:
    stream:
      bindings:
        InputMessage:
          destination: myMessage
          contentType: text/plain
        OutputMessage:
          destination: myMessage
          contentType: text/plain

原因是设置了Queue的contentType,规定了text,所以不论任何数据都会默认为text而导致接收类型报错。

出现这个问题的原因是因为现在的版本@Input和@Output重名会报错,所以必须给它们设置destination,后边的contentType是抄上那篇博客的......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值