命令对象自动添加到模型中?

时间:2016-02-04 07:48:11

标签: spring spring-mvc spring-boot

我有一个像这样的控制器方法:

@RequestMapping("/hello")
public String hello(UserForm user) {
    return "hello";
}

它在UserForm命令对象中接收一些请求参数。但我有编写任何代码来将对象添加到模型中。不过,在视图hello.jsp中,我能够访问数据,如下所示:

Hello, ${userForm.name}!

这是否意味着Spring MVC会自动将命令对象添加到模型中?

2 个答案:

答案 0 :(得分:0)

您只需使用@ModelAttribute作为参数即可Bean

您需要使用@ModelAttributemodel.addAttribute()将默认数据加载到模型中 - 例如从数据库中加载。

答案 1 :(得分:0)

现实世界中的大多数Spring控制器都接受许多不同类型的参数-路径变量,URL参数,请求标头,请求主体,有时甚至是整个HTTP Request对象。这提供了创建API的灵活机制。只要将ObjectMapper(如Jackson)配置为负责反序列化,Spring就会非常擅长将这些参数解析为Java类型。

RequestMappingHandlerAdapter确保从HttpServletRequest解析方法的参数。

  

在处理程序方法之前(或期间)创建的Spring模型数据   执行将在下一个视图之前复制到HttpServletRequest   呈现。

到目前为止,Spring已经处理了HTTP请求,并根据该方法的返回值创建了ModelAndView对象。另外,请注意,您无需从控制器方法返回ModelAndView实例。您可以返回视图名称,或者可以将ResponseEntity或POJO转换为JSON响应等。

ServletInvocableHandlerMethod invocableMethod 
  = createInvocableHandlerMethod(handlerMethod);
if (this.argumentResolvers != null) {
    invocableMethod.setHandlerMethodArgumentResolvers(
      this.argumentResolvers);
}
if (this.returnValueHandlers != null) {
    invocableMethod.setHandlerMethodReturnValueHandlers(
      this.returnValueHandlers);
}

returnValueHandlers对象是HandlerMethodReturnValueHandler对象的组合。还有许多不同的值处理程序,可以处理方法的结果以创建适配器期望的ModelAndViewobject。

然后,它必须呈现用户将在浏览器中看到的HTML页面。它基于模型和封装在ModelAndView对象中的选定视图来执行此操作。

现在,在此阶段,视图可以从userForm访问request scope(如上例所示)。