`

spring mvc 参数封装

 
阅读更多

请看这个问题。也许我们会说:通过写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类型参数的问题

    ### Spring MVC 无法直接接收 List 类型参数的问题详解 #### 问题背景 在 Web 开发过程中,前后端数据交互是必不可少的一部分。对于基于 Java 的 Spring MVC 框架而言,处理这种交互通常需要理解如何正确地接收前端...

    spring mvc jar包

    6. `org.springframework.aop-3.0.2.RELEASE.jar`:这个库提供了面向切面编程(AOP)支持,允许开发者定义“切面”来封装交叉关注点,如日志、事务管理等,从而实现代码解耦。 7. `org.springframework.expression-...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    6. **注解驱动开发**:Spring MVC支持使用注解来简化配置,如@RequestMapping用于映射请求,@RequestParam用于获取请求参数,@PathVariable用于处理URL路径变量。 7. ** ModelAndView**:这个类是用来存储模型数据...

    Spring mvc5.0.3 所有jar包

    4. **ModelAndView对象**: 这是Spring MVC中用于封装模型数据和视图名的对象。在Controller方法中,可以返回一个ModelAndView对象,指定返回的视图和传递给视图的数据。 5. **视图解析**: Spring MVC支持多种视图...

    基本的spring mvc + spring security实现的登录(无数据库)

    在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...

    Spring MVC 基础实例源码01

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个"Spring MVC 基础实例源码01"的资源很可能是为了帮助初学者理解Spring MVC的核心概念和...

    Spring MVC参数自动绑定List的解决方法

    Spring MVC 参数自动绑定 List 的解决方法 Spring MVC 参数自动绑定 List 的解决方法是一个常见的问题,在实际项目中,我们经常需要传入一组对象,而不是单个对象或数组。在 Spring MVC 中,参数自动绑定 List 的...

    spring mvc 整合包

    Spring MVC 是一个强大的Java Web应用程序开发框架,是Spring框架的一部分,专注于处理Web请求和返回响应。它提供了模型-视图-控制器(MVC)架构,帮助开发者构建灵活、可维护的Web应用。在这个"spring mvc 整合包...

    spring mvc+mybatis封装

    下面将详细解释Spring MVC和MyBatis的整合以及封装的关键知识点。 1. **Spring MVC**:Spring MVC是Spring框架的一个模块,它提供了一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。其主要功能包括请求分发...

    第11章Spring MVC常用参数的使用可运行源码 Spring MVC简单应用

    在本章中,我们将深入探讨 Spring MVC 的常用参数及其使用,通过可运行的源码来实践和理解这些概念。 1. **Spring MVC 概述** Spring MVC 提供了一个模型-视图-控制器架构,用于解耦应用程序的业务逻辑、数据处理...

    spring mvc架包

    1. **ModelAndView**: 这是 Spring MVC 中用于封装模型数据和视图名称的对象,通常在 Controller 方法中创建并返回,以便将数据传递给视图层。 2. **@Controller 和 @RequestMapping**: 这两个注解标记了一个类或...

    Spring MVC学习框架

    8. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到 Controller 方法的参数。同时,通过 @Valid 和 Validation API 可以实现数据校验。 9. **拦截器(Interceptor)**:拦截器可以在...

    spring mvc经典入门案例

    Spring MVC 支持使用注解进行开发,例如 `@RequestMapping` 用于映射 HTTP 请求,`@GetMapping` 和 `@PostMapping` 分别用于 GET 和 POST 请求,`@PathVariable` 用于获取 URL 路径变量,`@RequestParam` 用于获取...

    spring mvc mybatis velocity 示范

    查询结果被封装为Java对象,然后传递给Spring MVC的Controller。Controller再将这些对象传给Velocity模板,Velocity根据模板和数据生成响应的HTML页面。 例如,一个典型的流程可能如下:用户发起一个请求,...

    精通spring mvc 4 看透springmvc pdf 高清完全版

    《精通Spring MVC 4:看透SpringMVC》是一本深度解析Spring MVC框架的专业书籍,旨在帮助读者全面理解和掌握Spring MVC 4的核心概念和技术。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,它提供了模型...

    两个小时学会了Spring MVC

    Spring MVC 是一种基于模型-视图-控制器(MVC)设计模式的轻量级Java Web开发框架,由Spring框架提供。在上述描述中,我们看到一个开发者为了应对一个紧迫的项目,快速学习并理解了Spring MVC的核心概念。Spring MVC...

    Spring MVC 第一个例子

    在 Spring MVC 中,模型通常由 Java 对象(也称为 POJOs)组成,它们封装了应用程序的数据和行为。 - **视图(View)**:负责呈现数据。视图可以是 JSP、HTML、FreeMarker 等模板技术,用于将数据渲染成用户可读的...

    Spring mvc整合redis实例(redis连接池)

    在现代Web应用开发中,Spring MVC作为主流的MVC框架,常常需要与各种持久层技术进行集成以提高数据处理效率。Redis,一个高性能的键值存储系统,常被用于缓存、消息队列等场景。将Spring MVC与Redis结合,可以有效...

    Spring Mvc实例

    数据绑定是Spring MVC的一大特色,我们可以通过`@RequestParam`、`@PathVariable`、`@ModelAttribute`等注解将HTTP请求参数绑定到方法参数上。例如: ```java @PostMapping("/saveUser") public String saveUser(@...

Global site tag (gtag.js) - Google Analytics