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转为对象。

  • 相关阅读:
    20145207《信息安全系统设计基础》第十周学习总结
    《信息安全系统设计基础》第九周学习总结
    《信息安全系统设计基础》第九周学习总结
    20145207《信息安全系统设计基础》第一次实验实验报告
    qrcode插件生成二维码
    条形码生成工具
    客户端实现分页
    泛型+反射+三层实现工厂
    调用百度地图
    MVC爬取网页指定内容到数据库
  • 原文地址:https://www.cnblogs.com/guangshan/p/4462934.html
Copyright © 2011-2022 走看看