springmvc参数绑定

当项目中引入springmvc框架后,所有的请求流转将由springmvc进行控制,当客户端发送的请求中包含数据(也就是请求参数)时,那么该如何在controller层获取这些参数呢?
springmvc会自动的将请求中包含的参数和方法的参数进行匹配,也就是说只要保证,请求中的参数名称和方法中的参数名称相对应(另,参数的格式也要正确),在方法中就可以使用这些参数—即请求中的参数。

4.1基本类型参数绑定

当需要获取客户端发送过来的少量数据时,可以在Controller中声明的方法上,通过声明方法参数对这些参数一个一个进行接收,具体示例如下:

需求:通过浏览器发请求访问Controller,并在请求中携带name、age数据访问服务器,在服务器端的 Controller中获取这些数据。

1、创建com.tedu.controller.ParamController类

自定义springmvc controller参数动态绑定_java

2、在ParamController类中添加param1方法,用于接收基本类型的参数,代码实现如下:

自定义springmvc controller参数动态绑定_java_02

3、访问ParamController中的param1方法,在访问时,注意将name和age参数一起发送给服务器:

自定义springmvc controller参数动态绑定_数据_03

控制台输出结果为:

自定义springmvc controller参数动态绑定_spring_04

4.2包装类型参数绑定

当需要获取客户端发送过来的多个数据时,可以在Controller中声明的方法上,通过声明方法参数对这些数据一个一个进行接收较麻烦,可以在方法上声明对象类型的参数,通过对这些数据统一进行接受,springmvc会自动将接收过来的参数封装在对象中,具体示例如下:

1)、在ParamController类中添加param2方法,用于接收对象类型的参数,代码实现如下:

自定义springmvc controller参数动态绑定_mvc_05

2)、创建User类,声明name和age属性,提供对应的set和get方法,并重写toString方法

自定义springmvc controller参数动态绑定_spring_06

3)、访问ParamController中的param2方法,在访问时,注意将name和age参数一起发送给服务器:

自定义springmvc controller参数动态绑定_spring_07

控制台输出结果为:

自定义springmvc controller参数动态绑定_mvc_08

4.3日期类型参数绑定

1)、在ParamController类中添加param3方法,代码实现如下:

自定义springmvc controller参数动态绑定_spring_09

2)、访问ParamController中的param3方法,在访问时,注意将date参数一起发送给服务器:

自定义springmvc controller参数动态绑定_mvc_10

控制台输出结果为:

自定义springmvc controller参数动态绑定_数据_11

==================================================================
常见问题:

1、当访问ParamController中的param3方法,如果传递给服务器的日期数据是如下格式:

自定义springmvc controller参数动态绑定_mvc_12


从图中可以看出,如果日期参数是 yyyy-MM-dd 格式就会出现400错误,其实是因为参数格式匹配错误,由于springmvc默认的日期格式是yyyy/MM/dd,因此如果日期参数不是 yyyy-MM-dd 格式,就会出现400错误!!

2、解决方案:

在springmvc中,提供了@InitBinder注解,用于指定自定义的日期转换格式,因此,我们只需要在Controller类中添加下面的代码即可,在接受日期类型的参数时,会自动按照自定义的日期格式进行转换。

自定义springmvc controller参数动态绑定_spring_13

3、再次测试:

自定义springmvc controller参数动态绑定_mvc_14

控制台输出结果为:

自定义springmvc controller参数动态绑定_mvc_15