我刚刚开始使用Spring并运行RabbitMQ tutorial。
因此,代码发送并接收了一条消息,但是,当我尝试在ManagementUI中手动发布消息时,我总是收到错误Failed to invoke target method 'receiveMessage' with argument type = [class [B], value = [{[B@66d2e37b}]
。
阅读文档,我已经看到了:
从版本1.5.7、1.6.11、1.7.4和2.0.0开始,如果消息主体是序列化的Serializable Java对象,则在执行toString()操作时,它不再被反序列化(默认情况下)(例如在日志消息中)。这是为了防止不安全的反序列化。默认情况下,仅反序列化java.util和java.lang类。要恢复到以前的行为,可以通过调用Message.addWhiteListPatterns(...)添加允许的类/包模式。支持一个简单的通配符,例如com.something。* .MyClass。日志消息中的byte []表示无法反序列化的实体。
教程中的receiveMessage方法看起来像这样:
fun receiveMessage(message: String) {
println("Received <$message>")
}
但是要修复它,我必须使用以下代码:
fun <T> receiveMessage(message: T) {
if (message is ByteArray) {
val charset = Charsets.UTF_8
println(message.toString(charset))
} else {
println("Received <$message>")
}
}
成为所有Kotlin和Spring的新手。我只想检查这是否是处理这种情况的有效方法?
任何帮助将不胜感激。
谢谢。