1.DispatcherServlet类
doService方法:
doDispatch(request, response);处理
->doDispatch方法:
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());处理(RequestMappingHandlerAdapter)
2.RequestMappingHandlerAdapter类
handleInternal方法:
mav = invokeHandlerMethod(request, response, handlerMethod);处理
->invokeHandlerMethod方法
invocableMethod.invokeAndHandle(webRequest, mavContainer);处理
3.ServletInvocableHandlerMethod类
invokeAndHandle方法:
Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);处理
->resolveArgument方法:
resolver.resolveArgument(parameter, mavContainer, webRequest, binderFactory);处理
4.RequestResponseBodyMethodProcessor类
resolveArgument()方法:
Object arg = readWithMessageConverters(webRequest, parameter, parameter.getNestedGenericParameterType());处理
->readWithMessageConverters方法
Object arg = readWithMessageConverters(inputMessage, parameter, paramType);处理
->readWithMessageConverters()方法
for (HttpMessageConverter<?> converter : this.messageConverters) {
Class<HttpMessageConverter<?>> converterType = (Class<HttpMessageConverter<?>>) converter.getClass();
GenericHttpMessageConverter<?> genericConverter =
(converter instanceof GenericHttpMessageConverter ghmc ? ghmc : null);
if (genericConverter != null ? genericConverter.canRead(targetType, contextClass, contentType) :
(targetClass != null && converter.canRead(targetClass, contentType))) {
// convert是MappingJackson2MessageConverter时
if (message.hasBody()) {
HttpInputMessage msgToUse =
getAdvice().beforeBodyRead(message, parameter, targetType, converterType);
// 这里将json对象生成java对象
body = (genericConverter != null ? genericConverter.read(targetType, contextClass, msgToUse) :
((HttpMessageConverter<T>) converter).read(targetClass, msgToUse));
body = getAdvice().afterBodyRead(body, msgToUse, parameter, targetType, converterType);
}
else {
body = getAdvice().handleEmptyBody(null, message, parameter, targetType, converterType);
}
break;
}
}