谁在spring-mvc中执行请求参数绑定和类型转换?

时间:2016-06-13 09:11:56

标签: java spring spring-mvc

我不了解Spring MVC的流程,以下是我所面临的一些疑问。

@RequestMapping(value = "/addUser",method = RequestMethod.POST)
public ModelAndView addUser(@RequestParam("name") String name, @RequestParam("age") Integer age)
{
       // demo method

}
  • nameage字段如何绑定?我是谁(任何拦截器)?
  • 谁正在将age字段解析为Integer?
  • 谁绑定了以下示例中标有User的{​​{1}}对象?

模型属性绑定

@ModelAttribute
  • 我们如何在上述方法中获得@RequestMapping(method = RequestMethod.POST, value = "doLogin") public ModelAndView doLogin( @ModelAttribute("user") User userModel, HttpSession httpSession) { } 的对象?我的意思是流动。
  • 在Spring中组件的范围是HttpSession,那么如果我有1000个用户访问我的Web应用程序,是不是每个用户都会获得不同的对象?那怎么样Singleton

1 个答案:

答案 0 :(得分:6)

  1. 使用@RequestMapping注释方法时,RequestMappingHandlerAdapterregister built-in argument resolvers

  2. 将扫描处理程序方法的参数,并根据类型或注释,适当的参数解析程序将启动。例如,对于@RequestParam注释,将调用RequestParamMethodArgumentResolver

  3. 参数解析器会指导转换和绑定(如果适用)。转换由ConverterPropertyEditor的适当实施处理。绑定由DataBinder的适当实例处理。对于RequestParamMethodArgumentResolver的情况,例如@RequestParam("age")NumberEditor指导转化,WebDataBinder指导约束。

  4. 您的示例中的不同情况都是上述流程的主题,但不同的参数解析器会起作用,例如: ModelAttributeMethodProcessor,编辑器的不同转换器启动(您可以为自定义类型注册自定义转换器,或者User将调用默认构造函数等。)

    关于单例困境,它指的是组件的单个实例,它只涉及组件的实例变量。其中的方法和参数可以作为新实例,它不会从单例视角中起作用