SpringMVC中请求参数的处理

1. 简单类型请求参数(一个一个参数接收)

1.1

通过@RequestParam注解,可以对请求的参数进行重命名设置;如果不设置@RequestParam,则传递的参数名称默认等于Controller中的参数名称。

1.2. RESTfull风格:

 1.3. 针对Post请求,处理中文乱码问题,在web.xml配置文件中添加过滤器

2.复杂类型请求参数(数组和集合)

2.1 如果Controller方法的接收参数为集合(List),不能直接接收;但是Controller方法可以接收一个对象,我可以把集合封装到对象中。

浏览器请求参数为集合:

Controller接收参数方式:

其中,FormBean对象中封装了一个ids的集合,并创建了一个get和set方法;

2.2 请求参数为数组,则Controller接收参数时,参数可以直接定义为一个数组。

2.3 Controller中的方法参数可以声明为一个实体类

url请求:

 Controller中接收参数:

声明一个User对象

参数传递接收总结:

2,4. ModelAttribute注解

解释:第一种用法,就是说如果我的形参是一个符合类型(也就是说是个实体类),则我可以添加ModelAttribute注解,给这个参数重命名,前台使用这个参数的时候,可以直接用这个重命名的名字。

第二种用法,如果一个没有标记@RequestBody的方法,方法上添加ModelAttitute的话,说明我在执行这个Controller任何一个有@RequestBody的方法之前,都要先执行我这个有ModelAttribute的方法

比如

这个abc方法,比如我调用/test1方法,则先调用abc方法,这里干什么用呢?一般配合abc方法的参数Model model,用于共享这个model

2.5.  处理其它请求信息

解释:@RequestHeader注解用于获取请求头中的值,User-Agent是请求中key值;@CookieValue是用于获得session的值

@SessionAttributes注解:看test2请求,我model中定义了变量errorMsg,前台abc.jsp页面通过${errorMsg}取值时,是不能取到的,因为这个是重定向到abc.jsp页面,重定向不能实现数据的共享;用flash也不可以,因为flash只能是重定向到Controller才能实现数据共享;那如何让我的abc.jsp页面中取到我的errorMsg值呢,我可以在Controller类中添加@SessionAttributes("errorMsg")注解,将我的errorMsg注解放到session,我的abc.jsp页面就可以取到值了

原文地址:https://www.cnblogs.com/panbin/p/11355065.html