Stomp與Jackson

  讀取Stomp消息的類在StompDecoder中,org.springframework.messaging.simp.stomp.StompDecoder。java

  Jackson把json轉對象是在以下步驟中:spring

  一、org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite類中的resolveArgument(MethodParameter parameter, Message<?> message)方法,返回Objectjson

  二、org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver類中的resolveArgument(MethodParameter parameter, Message<?> message)方法中的Object target = this.converter.fromMessage(message, targetClass);app

  三、調用org.springframework.messaging.converter.CompositeMessageConverter類的fromMessage(Message<?> message, Class<?> targetClass)方法,遍歷本類中的全部converters,找到合適的結果並返回。this

  四、調用org.springframework.messaging.converter.AbstractMessageConverter類中的fromMessage(Message<?> message, Class<?> targetClass)中的convertFromInternal(message, targetClass);方法spa

  五、convertFromInternal(message, targetClass);方法在org.springframework.messaging.converter.MappingJackson2MessageConverter中實例化(PS:也能夠使用其餘convert,只要spring支持便可):code

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);
        }
    }

  六、從這裏開始調用fasterxml.jackson包對數據進行綁定。xml

  默認對json綁定到map,若是有對象的話則會把map轉爲對象。對象

相關文章
相關標籤/搜索