`
liyixing1
  • 浏览: 952946 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

springmvc action方法中参数具有@ModelAttribute与不具有的区别

 
阅读更多
在springmvc的参数解析中,发现具有@ModelAttribute 注解,那么最后会进入方法:

org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute

该方法的代码是:
private WebDataBinder resolveModelAttribute(String attrName, MethodParameter methodParam,
ExtendedModelMap implicitModel, NativeWebRequest webRequest, Object handler) throws Exception {

// Bind request parameter onto object...
String name = attrName;
if ("".equals(name)) {
name = Conventions.getVariableNameForParameter(methodParam);
}
Class<?> paramType = methodParam.getParameterType();
Object bindObject;
if (implicitModel.containsKey(name)) {
bindObject = implicitModel.get(name);
}
else if (this.methodResolver.isSessionAttribute(name, paramType)) {
bindObject = this.sessionAttributeStore.retrieveAttribute(webRequest, name);
if (bindObject == null) {
raiseSessionRequiredException("Session attribute '" + name + "' required - not found in session");
}
}
else {
bindObject = BeanUtils.instantiateClass(paramType);
}
WebDataBinder binder = createBinder(webRequest, bindObject, name);
initBinder(handler, name, binder, webRequest);
return binder;
}

可以看到,对于这种参数,
1.如果发现modelMap中不存在这个对象,那么,会自动创建这个对象。创建完之后,进入下一步
2.如果已经存在,进入下一步。

这里的下一步处理,可以发现就算请求参数有一个名字刚好和这个参数名相同也不会处理,因为之后springmvc只会处理这个对象的子属性,而不会再次处理它自己了。
分享到:
评论

相关推荐

    springMvc集合接收参数的用法

    与Ajax类似,你需要一个控制器方法来接收这些参数。这次,Spring MVC会自动将它们映射到一个列表中。 ```java @PostMapping("/saveForm") public String saveForm(@ModelAttribute("items") List&lt;Item&gt; dataList) {...

    Spring In Action SpringMVC 提交表单

    《Spring In Action: SpringMVC 提交表单详解》 在Web开发中,SpringMVC作为Spring框架的一部分,是处理HTTP请求和响应的强大工具。它为开发者提供了构建高性能、易于测试的Web应用程序的结构。本篇文章将深入探讨...

    java spring mvc项目,通过URL地址传递对象参数给action.zip

    本教程将详细解释如何通过URL地址传递对象参数给Action,即控制器方法,主要关注`@ModelAttribute`注解的使用。 1. **对象作为参数** 在传统的HTTP请求中,我们通常通过URL查询字符串或POST请求体来传递简单的键值...

    springmvc注解详解

    @Controller 注解的主要作用是注册所写的 Controller 类,添加了@Controller 注解的类就可以担任控制器(Action)的职责,不使用注解,定义 SpringMVC 的控制类,则要继承 Spring 的 Controller 接口,如:...

    Spring In Action MVC 提交表单(2)-数据绑定和数据校验

    在Spring框架中,MVC(Model-View-Controller)模式是构建Web应用程序的常用方法,它将业务逻辑、用户界面和应用控制分离,使得代码更易于维护和扩展。本篇文章将深入探讨Spring MVC中关于数据绑定和数据校验的知识...

    三歪教你学SpringMVC.docx

    SpringMVC支持自动绑定请求参数到控制器方法的参数中,例如: ```java @RequestMapping("/user") public String getUser(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); ...

    springmvc第一天课堂笔记.docx

    1. **控制器**:SpringMVC中的控制器是单例模式,而Struts2中的Action是多例模式。 2. **参数绑定**:SpringMVC支持直接的参数绑定,而Struts2需要通过ActionForm来绑定参数。 3. **异常处理**:SpringMVC通过统一的...

    springmvc-form表单的使用

    在Controller中,可以通过方法参数来接收这些数据。例如,可以定义一个接受`MyPojo`类型参数的方法来处理提交的数据。 ```java @RequestMapping(value = "/submit", method = RequestMethod.POST) public String ...

    关于Spring MVC同名参数绑定问题的解决方法

    然后,我们需要在控制器方法中加入`@ModelAttribute`注解,明确指定参数与模型之间的映射关系: ```java @RequestMapping("/test.action") public void test(@ModelAttribute("account") Account account, @...

    SpringMVC课堂笔记(1)

    #### 六、SpringMVC与Struts2的区别 1. **配置方式**:SpringMVC倾向于使用声明式编程,通过注解或XML配置来管理控制器;而Struts2则更依赖于XML配置文件。 2. **请求处理机制**:SpringMVC采用单例模式管理控制器,...

    springmvc课堂笔记-1

    - **@ModelAttribute**:用于方法参数或返回值,表示该方法的结果应该添加到模型中。 #### 七、SpringMVC与Struts的区别 - **学习曲线**:SpringMVC相对简单,易于学习;而Struts有一定的学习门槛。 - **灵活性**...

    SpringMVC笔记以及面试题.docx

    在实际开发中,开发者会通过注解如 `@RequestMapping` 来指定 URL 映射,`@RequestParam` 获取请求参数,`@ModelAttribute` 绑定模型数据,`@PathVariable` 获取路径变量,以及使用 `@Autowired` 自动注入依赖等。...

    SpringMVC4教程-超权威--超详细

    - **请求头映射**:使用@RequestHeader注解可以从请求头中获取值并绑定到控制器方法的参数上。 #### 五、处理模型数据 - **模型数据传递**:控制器可以通过Model或ModelAttribute对象向视图传递数据,这些数据将...

    详解SpringMVC——接收请求参数和页面传参

    2. **Spring自动注入**:Spring MVC框架支持自动将请求参数映射到控制器方法的参数上,只要参数名与表单字段的name属性相匹配。例如: ```java @RequestMapping("/login.do") public String login...

    详解SpringMVC注解版前台向后台传值的两种方式

    在上述代码中,`@RequestParam`注解用于从请求中提取特定的参数并将其绑定到方法参数上。 #### 2. 模型属性 **1.** 除了使用`@RequestParam`,还可以使用`@ModelAttribute`来将前端提交的数据绑定到模型对象上。...

    springmvc绑定Set的解决方案

    如果默认的自动绑定方式无法满足需求,例如,请求参数的格式与预期的Set元素类型不匹配,那么可以注册一个自定义的`Converter`。Spring MVC提供了`Converter`接口,允许我们自定义类型转换逻辑。通过实现该接口并...

    springmvc注解实现用户注册验证

    这里,`@ModelAttribute("user")`注解将HTTP请求中的数据绑定到`User`对象,而`BindingResult`参数则用于存储验证错误信息。 然后,我们需要讨论数据验证。Spring MVC提供了一种强大的基于注解的数据验证机制,通过...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_8_标签库 共39页.pptx

    **SpringMVC_3_方法入参**(共41页):该章节详细讲解了如何在控制器的方法中接收不同的参数类型,例如原始类型、POJO对象、HTTP请求对象等,并且会介绍如何使用SpringMVC提供的各种注解来实现这些功能。 **...

    spring学习: spring mvc在redirect请求中传递数据

    标题中的“spring学习:spring mvc在redirect请求中传递数据”揭示了本次讨论的核心主题,即如何在Spring MVC框架中处理重定向(redirect)请求时传递数据。这涉及到Spring MVC的请求转发和重定向概念,以及如何在...

    spring in action mvc 第四版 中文版

    - @RequestParam、@PathVariable:从请求参数中获取数据。 - @ModelAttribute:用于将对象绑定到请求或模型中,支持数据验证。 5. **异常处理** - @ExceptionHandler:自定义异常处理,提供统一的错误反馈。 - ...

Global site tag (gtag.js) - Google Analytics