SpringMVC的入参转换和响应参数转换

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇文章中讲了大概的执行流程,这里详细讲一下入参转换和响应转换的实现原理
入参转换和响应转换的流程都是在通过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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值