首页 > 编程语言 > 详细

Spring Boot请求结果返回处理原理

时间:2021-04-10 15:51:01      阅读:13      评论:0      收藏:0      [点我收藏+]

1、发送请求,请求到达DispatcherServlet的doService方法

2、doService方法调用doDispatch进行请求处理

3、doDispatch方法处理流程:

技术分享图片

processedRequest = this.checkMultipart(request);
multipartRequestParsed = processedRequest != request;
mappedHandler = this.getHandler(processedRequest);
if (mappedHandler == null) {
    this.noHandlerFound(processedRequest, response);
    return;
}
HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());

封装请求对象,通过getHandler方法获取请求对应的handler对象,根据handler通过getHandlerAdapter方法获取处理handler的HandlerAdapter对象

调用对应HanlderAdapter的handler方法处理请求

技术分享图片

 

 handler方法中调用handleInternal方法

技术分享图片

 

 在handlerInternal方法中调用invokeHandlerMethod方法执行请求的目标方法并返回一个ModelAndView对象

技术分享图片

 

 invokeHandlerMethod方法中将参数解析器和返回处理器设置到invocableMethod对象中,然后调用invocableMethod对象的invokeAndHandler方法处理请求

技术分享图片

 

 技术分享图片

 

 invokeAndHandler方法中调用invokeForRequest方法通过反射执行请求方法并返回结果

技术分享图片

 

将返回结果进行处理

技术分享图片

 

 调用返回结果处理器的处理返回值方法,在handlerReturnValue方法中调用selectHandler方法返回处理当前返回结果的handler

技术分享图片

 

 selectHandler方法通过判断返回结果处理器集合中每个返回结果处理器是否支持处理当前返回结果

技术分享图片

 

 调用返回的返回结果处理handler的handlerReturnValue方法返回结果转换

技术分享图片

 

 handlerReturnValue方法中调用writeWithMessageConverters方法对返回结果处理

writeWithMessageConverters方法中获取客户端(发送请求)支持的媒体类型,获取服务端能处理当前返回数据类型的媒体类型(根据消息转换器匹配是否支持转换此返回类型),并对两边的媒体类型进行匹配并根据权重进行排序等操作

技术分享图片

 

 技术分享图片

取出第一个媒体类型,并在所有消息转换器中寻找支持此媒体类型和返回类型的消息转换器,找到之后跳出循环层到label159标记处

技术分享图片

 

 调用messageConverter的write方法写出数据

技术分享图片

 

以上就是返回数据的大概流程。

 

Spring Boot请求结果返回处理原理

原文:https://www.cnblogs.com/kjs-bk/p/14640899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!