我想在 spring mvc 應用程式中使用 mqtt 訊息有效負載填充 Java pojo 類。我的代碼是:
String messagePayload = (String) message.getPayload();
ObjectMapper objectMapper= new ObjectMapper();
Test test = null;
try {
test = objectMapper.readValue(messagePayload, Test.class);
} catch (IOException e) {
e.printStackTrace();
return;
}
MQTT MessagePayload 是{"name":"abc","age": 32},但是當它在變數messagePayload 中轉換為 String 時,它顯示為 {name:abc,age:32}。你看,去掉所有的雙引號。這在嘗試塊時會引發錯誤
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('n' (code 110)): was expecting double-quote to start field name
at [Source: (String)"{name:abc,age:34}"; line: 1, column: 3]
我需要幫助將 MQTT 訊息轉換為 Java POJO 類。還有另一種方法嗎?或者如何更正我現有的代碼?
uj5u.com熱心網友回復:
MqttMessage.getPayload() 回傳一個位元組 []。要將其轉換為 String 物件,您應該使用new String(message.getPayload())
uj5u.com熱心網友回復:
我解決了這個問題。實際上,我正在傳遞來自 cmd(mosquitto 安裝在我的 Windows 中)的訊息,例如
mosquitto_pub -t whatTopic -m "{"name":abc, "age":32}"。這條訊息來自 spring mvc 應用程式,如
{name:abc,age:32}。因此它不能用 Jackson 或 Gson 庫反序列化為物件。
然而,當我使用工具 MQTTLens 發送相同的訊息時,訊息完全像
{"name":abc, "age":32}
現在,這可以反序列化為一個 java 物件。所以,我現在假設從命令提示符只應該發送字串。如果要測驗具有 JSON 格式(如訊息)的應用程式,請使用 MQTTLens 之類的工具進行測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/396571.html
