4 回答
TA贡献1783条经验 获得超4个赞
它看起来像我为 Kafka 看到的行为,因为你也在使用 Spring 我认为它是相同的。
您的发送端将对象转换为 Json,然后将其作为字符串发送 - 因此错误消息 () 中的转义引号\"nome\": \"John\",\n\t\t\t\"cognome\": \"Doe\"
。
您需要在发送方声明 JsonSerializer 然后将其传递给您User
,或者 - 如果您手动创建 Json String - 声明它是一个字节数组,这样 Spring 就不会尝试转义引号和空格。
TA贡献1794条经验 获得超7个赞
看起来您正在对 JSON 进行“双重”编码。
如果您使用 发送 JSON 字符串RabbitTemplate,则不应使用 JSON 消息转换器,因为它会重新编码已经编码的 JSON。
要么使用template.send(msg)(设置messageProperties.contentType()为application/json),要么如果使用,则在模板中convertAndSend()使用 a并SimpleMessageConverter
template.convertAndSend(exchange, rk, myJsonStrng, msg -> {
msg.getMessageProperties().setContentType("application/json");
return msg;
});
TA贡献1828条经验 获得超13个赞
终于找到了导致您发布的堆栈跟踪的匹配输入
问题是您对 jackson 映射器的输入是这样的:
\"{\\n\\t\\t\\t\\\"nome\\\": \\\"John\\\",\\n\\t\\t\\t\\\"cognome\\\": \\\"Doe\\\"\\n\\t\\t}\"
杰克逊认为这是一个单一的价值,但未能将其映射到创造者身上。
正确的输入看起来像这样
{\n\t\t\t\"nome\": \"John\",\n\t\t\t\"cognome\": \"Doe\"\n\t\t}
正如@daniu
发布的那样,这可能是由于Spring
其他地方的一些干扰。
TA贡献1841条经验 获得超3个赞
您可能可以编写复杂的自定义 JSON 配置,但最简单的解决方案是将您的消息反序列化回类,User
然后向您的Persona
类添加一个构造函数,该构造函数将id
classUser
作为参数
添加回答
举报