You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot整合RabbitMQ消费者运行后POST请求报JSON解析异常

问题根因

报错核心是待解析的内容不是合法JSON:日志里显示待解析的字符串是TemplateRequest(templateField=abc),这是Lombok为TemplateRequest类生成的toString()方法输出结果,完全不符合JSON格式,Jackson自然无法解析。触发问题的具体原因有两点:

  • 通道配置冲突:消费者模式下你将template-channel通过@Input注解声明为输入(消费)通道,但消息发布网关TemplatePublishGateway配置的投递目标就是这个同名通道,相当于消息在应用本地直接被投递到了输入通道,跳过了Spring Cloud Stream默认的出站JSON序列化流程,原始Java对象直接流入通道,后续处理时直接取对象toString结果当JSON解析,直接触发异常。
  • 生产者模式下只看到交换机看不到队列是正常现象:没有配置消费者组、没有消费者实例连接的情况下,Spring Cloud Stream不会自动创建绑定到交换机的队列。
修复步骤

不要复用同一个通道定义同时处理生产、消费逻辑,拆分输入输出通道即可解决:

  1. 重写通道定义接口,明确区分输入、输出通道,不要使用相同通道名:
public interface TemplateStreamChannel {
    String OUTPUT_NAME = "template-output";
    String INPUT_NAME = "template-input";

    @Output(OUTPUT_NAME)
    MessageChannel outputChannel();

    @Input(INPUT_NAME)
    SubscribableChannel inputChannel();
}
  1. 修改消息网关配置,指定消息投递到输出通道:
@MessagingGateway
public interface TemplatePublishGateway {
    @Gateway(requestChannel = TemplateStreamChannel.OUTPUT_NAME)
    void templatePublishRequest(@Payload TemplateRequest templateRequest, @Header("message") String message, @Header("processTime") Long processTime, @Header("type") String type);
}
  1. 修改消费端监听器,指定监听输入通道:
@StreamListener(TemplateStreamChannel.INPUT_NAME)
public void stateChannelHandler(@Payload String payload, @Header("message") String message, @Header("processTime") Long processTime, @Header("type") String type) throws JsonProcessingException {
    // 原有业务逻辑无需改动
}
  1. 在application配置中添加通道绑定规则,将输入、输出通道绑定到同一个RabbitMQ交换机,同时配置消费者组,启动后会自动创建绑定队列:
spring:
  cloud:
    stream:
      bindings:
        template-output:
          destination: template-exchange
          contentType: application/json
        template-input:
          destination: template-exchange
          group: template-consumer
  1. 所有标注@EnableBinding的位置,将绑定的类替换为新的TemplateStreamChannel接口即可。

优化提示:你不需要在消费逻辑中手动使用ObjectMapper做反序列化,直接将监听器方法的payload参数类型声明为TemplateRequest,Spring Cloud Stream会根据消息头的contentType自动完成JSON转对象的操作,减少冗余代码。

内容的提问来源于stack exchange,提问作者Nayana Pravalika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:24:23