Stomp与Jackson
读取Stomp消息的类在StompDecoder中,org.springframework.messaging.simp.stomp.StompDecoder。
Jackson把json转对象是在如下步骤中:
1、org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite类中的resolveArgument(MethodParameter parameter, Message<?> message)方法,返回Object
2、org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver类中的resolveArgument(MethodParameter parameter, Message<?> message)方法中的Object target = this.converter.fromMessage(message, targetClass);
3、调用org.springframework.messaging.converter.CompositeMessageConverter类的fromMessage(Message<?> message, Class<?> targetClass)方法,遍历本类中的所有converters,找到合适的结果并返回。
4、调用org.springframework.messaging.converter.AbstractMessageConverter类中的fromMessage(Message<?> message, Class<?> targetClass)中的convertFromInternal(message, targetClass);方法
5、convertFromInternal(message, targetClass);方法在org.springframework.messaging.converter.MappingJackson2MessageConverter中实例化(PS:也可以使用其他convert,只要spring支持即可):
public Object convertFromInternal(Message<?> message, Class<?> targetClass) {
JavaType javaType = this.objectMapper.constructType(targetClass);
Object payload = message.getPayload();//这里可以看到取消息字节流
try {
if (payload instanceof byte[]) {
return this.objectMapper.readValue((byte[]) payload, javaType);//这里是转换的核心
}
else {
return this.objectMapper.readValue((String) payload, javaType);
}
}
catch (IOException ex) {
throw new MessageConversionException(message, "Could not read JSON: " + ex.getMessage(), ex);
}
}
6、从这里开始调用fasterxml.jackson包对数据进行绑定。
默认对json绑定到map,如果有对象的话则会把map转为对象。
Stomp与Jackson的更多相关文章
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- ActiveMQ、Stomp、SockJS入门级应用
使用ActiveMQ.Stomp.SockJS实现实时在线聊天 ActiveMQ : 强大的开源即时通讯和集成模式的服务器.在本项目中充当消息代理服务器,stomp协议服务端. 安装:在官网下载,直接 ...
- 006-优化web请求二-应用缓存、异步调用【Future、ListenableFuture、CompletableFuture】、ETag、WebSocket【SockJS、Stomp】
四.应用缓存 使用spring应用缓存.使用方式:使用@EnableCache注解激活Spring的缓存功能,需要创建一个CacheManager来处理缓存.如使用一个内存缓存示例 package c ...
- Spring Boot实现STOMP协议的WebSocket
关注公众号:锅外的大佬 每日推送国外优秀的技术翻译文章,励志帮助国内的开发者更好地成长! WebSocket协议是应用程序处理实时消息的方法之一.最常见的替代方案是长轮询(long polling)和 ...
- Spring+Stomp+ActiveMq实现websocket长连接
stomp.js+spring+sockjs+activemq实现websocket长连接,使用java配置. pom.xml(只列出除了spring基本依赖意外的依赖,spring-version为 ...
- jackson简单使用,对象转json,json转对象,json转list
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...
- Jackson 通过自定义注解来控制json key的格式
Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...
- STOMP协议介绍
STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息 ...
- Jackson的简单用法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是 ...
随机推荐
- 随时查找中位数——pat1057
http://pat.zju.edu.cn/contests/pat-a-practise/1057 题目的意思是可以在一个可以任意添加于删除整数的集合里随时查找该集合的中位数 每次查找用nlogn的 ...
- css3作3D旋转视频展示
代码如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- excel linux扩展
接近我的示例 http://ju.outofmemory.cn/entry/116399 http://tanxw.blog.51cto.com/4309543/1618576 http://blog ...
- 2、Flume1.7.0入门:安装、部署、及flume的案例
一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用. flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的 ...
- juc线程池原理(二):ThreadPoolExecutor的成员变量介绍
概要 线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理. ThreadPoolExecutor数据结构 Thread ...
- C#使用自定义字体
/// <summary> /// 设置字体 /// </summary> /// <param name="path">字体文件路径,包含字体 ...
- tomcat7.0在centos7下中文乱码问题解决汇总
1. 系统级的中文设置 Centos7跟之前的6和5安装的中文字符命令都不一样 [root@iZ25bdzgev8Z ~]# locale #查看当前系统的语言环境 [root@iZ25bdzgev8 ...
- [置顶]
STM32的ADC1采集多条通道,可以不使用DMA功能吗?
类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器.它有多达18条 ...
- Arp内网毒化
攻击者:192.168.220.143 受害者:192.168.220.137 默认网关:192.168.220.2 首先,开启IP转发 使用工具Arpspoof进行ARP毒化,把受害者的流量传送给网 ...
- Python多线程-信号量
信号量就是一个线程中有多个线程 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threading import ...