前面分析了复杂对象的参数解析,接着分析简单参数解析,简单参数就是long int string 等。其实简单参数的解析和@RequestParam 的解析都是使用RequestParamMethodArgumentResolver这个类来解析
通过继承AbstractNamedValueMethodArgumentResolver 实现了HandlerMethodArgumentResolver接口具有了参数解析功能。
这里主要是从request域中解析参数值,最后创建webdatabinder 用binder做参数类型转换
这里创建databinder前面已经分析过了,
来到databinder 中
看 getTypeConverter()方法,简单参数类型,复杂类型主要是这里不同,
在这个方法里面会判断当前dababinder是否憨厚getTarget() 如果是简单类型target是null,如果是复杂类型则是 需要解析的实体,例如如果参数是user 则这里的target就是一个User实例,由于这里的target没有会走下面生成一个simpleTypeConverter。
继续看生成simpleTypeConverter过程
继续看 构造器
看到这里就明白了,里面依然构造了一个typeConverterDelegate,将类型转换工作交割typeConverterDelegate这个实例处理,和复杂对象的解析是一个路子。
在初始化之后又把conversionService交给了SimpleTypeConverter
进入方法里面直接查看真正的解析过程
直接用刚刚创建的typeConverterDelegate进行解析和beanwarpImpl一样的套路。
这里一样先找PropertyEditor如果有PropertyEditor则用自定义的PropertyEditor进行解析如果没有则找conversionservice进行解析,如果还没有则查找默认的PropertyEditor
点进去这个方法
spring mvc参数解析 (九)HandlerMethodArgumentResolver
最新推荐文章于 2024-09-09 15:33:17 发布