讀取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轉爲對象。對象