场景:
发送mq消息到消费者,消费者端报错:
cn.hutool.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1] at cn.hutool.json.JSONTokener.syntaxError(JSONTokener.java:373) at cn.hutool.json.JSONObject.init(JSONObject.java:780) at cn.hutool.json.JSONObject.<init>(JSONObject.java:228) at cn.hutool.json.JSONObject.<init>(JSONObject.java:205) at cn.hutool.json.JSONObject.<init>(JSONObject.java:193)
此时消费者接受的message序列化为:
生产者代码:
因为不是自己维护的代码,查看 RabbitTemplate 配置,发现使用了 Jackson2JsonMessageConverter
关于Jackson2JsonMessageConverter :
Jackson2JsonMessageConverter 是 RabbitMQ 的一个消息转换器,它用于将 Java 对象转换为 JSON 格式的消息,以便在消息队列中传输。当消息生产者发送消息时,如果设置了 Jackson2JsonMessageConverter,它会自动将 Java 对象序列化为 JSON 字符串。同样,当消息消费者接收消息时,它会自动将 JSON 字符串反序列化为 Java 对象。
换言之,配置了Jackson2JsonMessageConverter 之后,不需要再手动转换Bean为json字符串,如果再次手动转换,会导致消息格式不正确,消费者反序列化失败。