在上一篇文章中讲了大概的执行流程,这里详细讲一下入参转换和响应转换的实现原理
入参转换和响应转换的流程都是在通过Adapter调用HandlerMethod时发生的。
如下是请求头设置,SpringMVC会根据content-type和accept类型选择合适的HttpMessageConverter来进行消息的转换

参数转化
private Object[] getMethodArgumentValues(NativeWebRequest request, ModelAndViewContainer mavContainer,
Object... providedArgs) throws Exception {
MethodParameter[] parameters = getMethodParameters();
Object[] args = new Object[parameters.length];
for (int i = 0; i < parameters.length; i++) {
MethodParameter parameter = parameters[i];
parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
args[i] = resolveProvidedArgument(parameter, providedArgs);
if (args[i] != null) {
continue;
}
//这里使用组合模式遍历所有参数解析器是否支持
if (this.argumentResolvers.supportsParameter(parameter)) {
try {
args[i] = this.argumentResolvers.resolveArgument(
parameter, mavContainer, request, this.dataBinderFactory);
continue;
}
}
}
return args

本文详细探讨了SpringMVC中入参转换和响应转换的实现过程。在调用HandlerMethod时,SpringMVC依据content-type和accept选择合适的转换器。参数转换通过消息转换器对请求头content-type解析并实例化参数对象。响应转换则基于@RequestBody注解,选择相应的类型转换器,根据Accept解析并进行消息转换。转换过程中涉及MediaType的兼容性和排序选择,确保了请求和响应的正确匹配。
最低0.47元/天 解锁文章
858

被折叠的 条评论
为什么被折叠?



