请看这个问题。也许我们会说:通过写vo来解决。确实,使用vo可以很好地解决spring mvc的参数封装的问题,而且,开发者写vo是一个好的习惯(我是一个懒人,如非必要很少写。。。)。
然而,我遇到另一个类似的问题。
请求方法如下:
@RequestMapping(value="/admin/website/delete/{id}",method=RequestMethod.POST)
public @ResponseBody void delete(@ModelAttribute("user")User user,@PathVariable("id")int id)
(方法里的内容没有贴出来)
它所在的Controller定义如下:
@Controller
@SessionAttributes("user")
public class WebSiteController
@ModelAttribute("user")User user与@SessionAttributes("user")对应,绑定了session中的"user"。
接下来,来看看User:
public class User {
private int id;
//其它属性、get/set方法及注解都省略了
}
于是,问题来了:session中user对象的id属性值被"/admin/website/delete/{id}"传进来的值覆盖了。
解决办法:
1.当然可以修改"/admin/website/delete/{id}",比如改为:"/admin/website/delete/{websiteId}",这样就不会覆盖user.id了,功能上完全没有问题。可是,这种需要确保各参数的属性名称不同的做法显然很不合理。如果这个user换作session里的其它对象,且属性较多,在执行类似的请求时,极有可能被某个同名参数将其属性覆盖。更糟糕的是,这种改变可能不会影响当前请求中程式的正确性,于是问题被隐藏了,但你不可能担保你在其它请求中使用这个session中的对象时不会有问题。
2.不使用@ModelAttribute("user")的方式来获得session中的user对象,使用HttpSession来取。当然,不好的地方就是使用了servlet的api。但相对于方法1,并且没有找到更好方法之前,更倾向于使用这一办法解决。
当前使用的spring版本是:3.1.0.RELEASE
仅作小记,希望对您有用,如果您有更好解决办法,很高兴您能将它分享出来。
分享到:
相关推荐
### Spring MVC 无法直接接收 List 类型参数的问题详解 #### 问题背景 在 Web 开发过程中,前后端数据交互是必不可少的一部分。对于基于 Java 的 Spring MVC 框架而言,处理这种交互通常需要理解如何正确地接收前端...
6. `org.springframework.aop-3.0.2.RELEASE.jar`:这个库提供了面向切面编程(AOP)支持,允许开发者定义“切面”来封装交叉关注点,如日志、事务管理等,从而实现代码解耦。 7. `org.springframework.expression-...
6. **注解驱动开发**:Spring MVC支持使用注解来简化配置,如@RequestMapping用于映射请求,@RequestParam用于获取请求参数,@PathVariable用于处理URL路径变量。 7. ** ModelAndView**:这个类是用来存储模型数据...
4. **ModelAndView对象**: 这是Spring MVC中用于封装模型数据和视图名的对象。在Controller方法中,可以返回一个ModelAndView对象,指定返回的视图和传递给视图的数据。 5. **视图解析**: Spring MVC支持多种视图...
在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个"Spring MVC 基础实例源码01"的资源很可能是为了帮助初学者理解Spring MVC的核心概念和...
Spring MVC 参数自动绑定 List 的解决方法 Spring MVC 参数自动绑定 List 的解决方法是一个常见的问题,在实际项目中,我们经常需要传入一组对象,而不是单个对象或数组。在 Spring MVC 中,参数自动绑定 List 的...
Spring MVC 是一个强大的Java Web应用程序开发框架,是Spring框架的一部分,专注于处理Web请求和返回响应。它提供了模型-视图-控制器(MVC)架构,帮助开发者构建灵活、可维护的Web应用。在这个"spring mvc 整合包...
下面将详细解释Spring MVC和MyBatis的整合以及封装的关键知识点。 1. **Spring MVC**:Spring MVC是Spring框架的一个模块,它提供了一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。其主要功能包括请求分发...
在本章中,我们将深入探讨 Spring MVC 的常用参数及其使用,通过可运行的源码来实践和理解这些概念。 1. **Spring MVC 概述** Spring MVC 提供了一个模型-视图-控制器架构,用于解耦应用程序的业务逻辑、数据处理...
1. **ModelAndView**: 这是 Spring MVC 中用于封装模型数据和视图名称的对象,通常在 Controller 方法中创建并返回,以便将数据传递给视图层。 2. **@Controller 和 @RequestMapping**: 这两个注解标记了一个类或...
8. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到 Controller 方法的参数。同时,通过 @Valid 和 Validation API 可以实现数据校验。 9. **拦截器(Interceptor)**:拦截器可以在...
Spring MVC 支持使用注解进行开发,例如 `@RequestMapping` 用于映射 HTTP 请求,`@GetMapping` 和 `@PostMapping` 分别用于 GET 和 POST 请求,`@PathVariable` 用于获取 URL 路径变量,`@RequestParam` 用于获取...
查询结果被封装为Java对象,然后传递给Spring MVC的Controller。Controller再将这些对象传给Velocity模板,Velocity根据模板和数据生成响应的HTML页面。 例如,一个典型的流程可能如下:用户发起一个请求,...
《精通Spring MVC 4:看透SpringMVC》是一本深度解析Spring MVC框架的专业书籍,旨在帮助读者全面理解和掌握Spring MVC 4的核心概念和技术。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,它提供了模型...
Spring MVC 是一种基于模型-视图-控制器(MVC)设计模式的轻量级Java Web开发框架,由Spring框架提供。在上述描述中,我们看到一个开发者为了应对一个紧迫的项目,快速学习并理解了Spring MVC的核心概念。Spring MVC...
在 Spring MVC 中,模型通常由 Java 对象(也称为 POJOs)组成,它们封装了应用程序的数据和行为。 - **视图(View)**:负责呈现数据。视图可以是 JSP、HTML、FreeMarker 等模板技术,用于将数据渲染成用户可读的...
在现代Web应用开发中,Spring MVC作为主流的MVC框架,常常需要与各种持久层技术进行集成以提高数据处理效率。Redis,一个高性能的键值存储系统,常被用于缓存、消息队列等场景。将Spring MVC与Redis结合,可以有效...
数据绑定是Spring MVC的一大特色,我们可以通过`@RequestParam`、`@PathVariable`、`@ModelAttribute`等注解将HTTP请求参数绑定到方法参数上。例如: ```java @PostMapping("/saveUser") public String saveUser(@...