springmvc参数绑定
当项目中引入springmvc框架后,所有的请求流转将由springmvc进行控制,当客户端发送的请求中包含数据(也就是请求参数)时,那么该如何在controller层获取这些参数呢?
springmvc会自动的将请求中包含的参数和方法的参数进行匹配,也就是说只要保证,请求中的参数名称和方法中的参数名称相对应(另,参数的格式也要正确),在方法中就可以使用这些参数—即请求中的参数。
4.1基本类型参数绑定
当需要获取客户端发送过来的少量数据时,可以在Controller中声明的方法上,通过声明方法参数对这些参数一个一个进行接收,具体示例如下:
需求:通过浏览器发请求访问Controller,并在请求中携带name、age数据访问服务器,在服务器端的 Controller中获取这些数据。
1、创建com.tedu.controller.ParamController类
2、在ParamController类中添加param1方法,用于接收基本类型的参数,代码实现如下:
3、访问ParamController中的param1方法,在访问时,注意将name和age参数一起发送给服务器:
控制台输出结果为:
4.2包装类型参数绑定
当需要获取客户端发送过来的多个数据时,可以在Controller中声明的方法上,通过声明方法参数对这些数据一个一个进行接收较麻烦,可以在方法上声明对象类型的参数,通过对这些数据统一进行接受,springmvc会自动将接收过来的参数封装在对象中,具体示例如下:
1)、在ParamController类中添加param2方法,用于接收对象类型的参数,代码实现如下:
2)、创建User类,声明name和age属性,提供对应的set和get方法,并重写toString方法
3)、访问ParamController中的param2方法,在访问时,注意将name和age参数一起发送给服务器:
控制台输出结果为:
4.3日期类型参数绑定
1)、在ParamController类中添加param3方法,代码实现如下:
2)、访问ParamController中的param3方法,在访问时,注意将date参数一起发送给服务器:
控制台输出结果为:
==================================================================
常见问题:
1、当访问ParamController中的param3方法,如果传递给服务器的日期数据是如下格式:
从图中可以看出,如果日期参数是 yyyy-MM-dd 格式就会出现400错误,其实是因为参数格式匹配错误,由于springmvc默认的日期格式是yyyy/MM/dd,因此如果日期参数不是 yyyy-MM-dd 格式,就会出现400错误!!
2、解决方案:
在springmvc中,提供了@InitBinder注解,用于指定自定义的日期转换格式,因此,我们只需要在Controller类中添加下面的代码即可,在接受日期类型的参数时,会自动按照自定义的日期格式进行转换。
3、再次测试:
控制台输出结果为: