zoukankan      html  css  js  c++  java
  • 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转为对象。

  • 相关阅读:
    Oracle 服务命名(别名)的配置及原理,plsql连接用
    AdHoc发布时出现重复Provisioning Profile的解决方案
    xcode5时代如何设置Architectures和Valid Architectures
    C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
    DataTable的数据批量写入数据库
    高中生活--第7篇–我为什么不交作业
    ITFriend网站内测公测感悟
    网站推广第一周总结和反思
    第一次当面试官
    技术人才的出路在哪里,5种选择和2种思路
  • 原文地址:https://www.cnblogs.com/guangshan/p/4462934.html
Copyright © 2011-2022 走看看