美文网首页
Spring消息转换流程

Spring消息转换流程

作者: 十毛tenmao | 来源:发表于2021-07-23 23:44 被阅读0次

    Spring MVC消息转换流程

    1. 调用方法获取返回值

    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle
    
    Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);
    

    2. 获取返回值的处理器

    org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#handleReturnValue
    
    //如果使用了@RequestBody,返回的就是RequestResponseBodyMethodProcessor
    HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);
    

    3. 使用MessageConverter转换body

    org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor#handleReturnValue
    
    mavContainer.setRequestHandled(true);
    
    ServletServerHttpRequest inputMessage = createInputMessage(webRequest);
    ServletServerHttpResponse outputMessage = createOutputMessage(webRequest);
    
    //执行消息转换
    // Try even with null return value. ResponseBodyAdvice could get involved.
    writeWithMessageConverters(returnValue, returnType, inputMessage, outputMessage);
    

    消息转换的逻辑

    • 先确定返回消息的MediaType: 根据可接受的MediaType和接口支持MediaType取交集中的第一个
    • 根据MediaType找到支持的消息转换器: 比如StringHttpMessageConverter,MappingJackson2HttpMessageConverter等
    • 转换消息: GenericHttpMessageConverter#write或HttpMessageConverter#write

    相关文章

      网友评论

          本文标题:Spring消息转换流程

          本文链接:https://www.haomeiwen.com/subject/cslmmltx.html