java - 收到的对象与模型不对应
问题描述
我有一个问题,但我发现很难表达出来。我从 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 中接收可以对应或不对应模型的对象。
感谢帮助 !
解决方案
您应该为您的 Model 类使用Map或HashMap的帮助。它应该类似于下面给出的类。
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");
推荐阅读
- javascript - 如何在 vue js 的内容可编辑 div 中添加组件
- javascript - 建立一个 6 个字母、2 个数字和 1 个标点符号的正则表达式密码
- rust - 我可以从不可变的 BTreeMap 中获取值吗?
- python - 如何使用 Python NLP 从数据库表中提取与搜索字符串中的关键字匹配的关键字
- python - 使用 4-d 内核确定 3-d 卷积的权重维度
- arrays - 快速循环后如何获取所有数据数组?
- javascript - 可以安全地忽略“警告:不希望服务器 HTML 包含 a”吗?
- python - 解码后的Encoder-Decoder噪声问题
- javascript - Javascript Array 四个元素,但在控制台中显示并且只能访问三个
- python - 尝试使用词汇表翻译文本时出现词汇表配置错误