码迷,mamicode.com
首页 > 其他好文 > 详细

Stomp与Jackson

时间:2015-04-28 15:30:12      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

  读取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

标签:

原文地址:http://www.cnblogs.com/guangshan/p/4462934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!