子spring对象和它的超级java.util对象之间的显式类型转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了子spring对象和它的超级java.util对象之间的显式类型转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2272字,纯文字阅读大概需要4分钟。
内容图文
在春天我使用的是jdbcTemplate,但是在查询List时遇到了返回Linkedcaseinsensitivemap的问题,在执行以下操作时我仍然得到spring linkedcaseinsensitivemap,即使我将它转换为java util List并定义左侧的作为java.util.List的赋值.
首先,这怎么可能?
final java.util.List<Map<String, Object>> list = (java.util.List<Map<String, Object>>) jdbc
.queryForList("SELECT * FROM customer");
那么,怎么会做这种类型的升级呢?
无需声明第二个列表为它分配内存,然后手动将对象放入java.util.List?
由于LinkedCaseInsensitive是java对象的子类,因此我很难弄清楚如何转换为超级对象,即java List.如何实现这一目标至关重要.
因为目前无法知道哪些经纪人将使用我们的AMQ,目标是严格保持jms对象,
所以我无法开始发送spring对象,因为jms应该是我们的标准,还请注意我没有选项来实现AMQProtocol,我需要发送基本的java对象,
由于已建议序列化为JSON,我将解释为什么它在这种情况下不起作用,为什么我需要将“按原样”发送给接收器,因为它们将把它放入Notes文档中.
for (int i = 1; i <= metadata.getColumnCount(); i++) {
String columnName = metadata.getColumnName(i);
Object values = sqlConnection.getRset().getObject(i);
doc.replaceItemValue(columnName, values);
}
那么,人们如何更好地实现这一目标呢?
请帮忙
提前致谢!
解决方法:
SQL select可以返回多行,每行有多个选定的列.
您正在调用的queryForList method返回一个List,其中每个选定的行都将Map映射列名称更改为列值.
Map和List是接口,因此Spring可以自由选择它喜欢的任何实现.它为Map选择LinkedCaseInsensitiveHashMap,因为该映射将按插入顺序列出键.因此,选择列的顺序不会丢失.
如果您希望将结果列表发送给您几乎不了解的接收器,则最好将其序列化为JSON并将其作为文本消息发送.
您可以使用像Gson或Jackson2这样的库序列化为JSON.您可以创建一个序列化程序并将其转换为您希望转换为String的对象.
例如在Gson中,序列化器类被称为Gson:
TextMessage message;
// initialize message and headers however you like
// then serialize it to String:
Gson gson = new Gson();
String json = gson.toJson(list);
// and set it in the message:
message.setText(json);
(您也可以让Spring JmsTemplate使用转换为JSON的MessageConverter为您执行此操作,但我估计这样做有点困难.)
或者,如果您希望自定义作为ObjectMessage发送的Map,则可以使用a different query method,它允许您指定自定义RowMapper,以创建您喜欢的java.util.Map实现.请注意,如果您使用TreeMap,它将按字母顺序对列进行排序,如果您使用HashMap,它将按随机顺序排列.
接收器然后可以将JSON解包回Java对象. gson.fromGson(json)将返回一个地图列表.
内容总结
以上是互联网集市为您收集整理的子spring对象和它的超级java.util对象之间的显式类型转换全部内容,希望文章能够帮你解决子spring对象和它的超级java.util对象之间的显式类型转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。