首页 > 解决方案 > 收到的对象与模型不对应

问题描述

我有一个问题,但我发现很难表达出来。我从 MQTT 接收到字节 [] 中的消息,我将其转换为字符串,然后将结果发送到 GSON,它为我创建了一个JenkinsMqttObject.

String messageToString = message.getPayload().toString();
JenkinsMqttObject monobjet = gson.fromJson(messageToString, JenkinsMqttObject.class);

在示例代码中,JenkinsMqttObject非常简化。我遇到的问题如下:

MQTT向我发送一个对象,它可以是:

"{"value1":20,"value2":40}

但这也可以是:

"{"value1":20,"value2":40,"value3":60}

因此,根据具体情况,我收到一个包含 2 个或 3 个属性的对象。问题是我创建了一个这样的java模型:

JenkinsMqttObject.class

private String value1;
private String value2;
private String value3;
//getter & setters...

问题是我在 GSON 说收到的对象是 JenkinsMqttObject 类型,但并非所有时间都是正确的!

所以我根本不知道,如何能够在 Java 中接收可以对应或不对应模型的对象。

感谢帮助 !

标签: javaspring-boot

解决方案


您应该为您的 Model 类使用MapHashMap的帮助。它应该类似于下面给出的类。

class JenkinsMqttObject{
    HashMap<String, String> values;
    //getters & setters
}

您必须修改主要代码,如下所示。

String messageToString = message.getPayload().toString();
HashMap<String,String> vmap = new Gson().fromJson(messageToString , new TypeToken<HashMap<String, String>>(){}.getType());
JenkinsMqttObject monobjet = new JenkinsMqttObject();
monobjet.setValues(vmap);

现在,如果您想访问任何值,可以按如下方式访问它。

monobjet.getValues().get("value1");

推荐阅读