SpringMvc-参数绑定

参数绑定

参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达Controller?这在实际项目开发中也是用到的最多的,那么SpringMvc的参数绑定是怎么实现的呢?下面我们来详细的讲解。

1.SpringMvc参数绑定

在SpringMvc中,提交请求的数据是通过方法形参来接收的。从客户端请求的key/value数据,经过参数绑定,将key/value数据绑定到Controller的形参上,然后在Controller就可以直接使用该形参。

参数绑定组件

在SpringMvc早期版本使用PropertyEditor(只能将字符串转成java对象)后期使用converter(进行任意类型的转换)。

SpringMvc提供了很多converter(转换器)在特殊情况下需要自定义converter

比如对日期数据绑定需要自定义converter

2.默认支持的类型

SpringMvc有支持的默认参数类型。我们直接在形参上给出这些默认类型的声明,就能直接使用。如下:

1)HttpServletRequest对象

2)HttpServletResponse对象

3)HttpSession对象

4)Model/ModelMap对象

这里我们重点说一下Model/ModelMap,ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域,即使使用Model接口,其内部绑定还是由ModelMap来实现。

3.基本数据类型的绑定

哪些是基本数据类型,我们这里重新总结一下:

1) byte   占用一个字节,取值范围为 -128~127,默认是"\u0000",标示空

2)short  占用两个字节,取值范围为-32768~32767

3)int      占用四个字节,取值范围为,-2147483648~2147483647

4)long   占用八个字节 ,对long类型变量赋值必须加上"L"或"l",否则不认为是long型

5)float  占用四个字节,对 float 型进行赋值的时候必须加上“F”或“f”,如果不加,会产生编译错误,因为系统自动将其定义为 double 型变量。double转换为float类型数据会损失精度。float a = 12.23产生编译错误的,float a = 12是正确的

6)double 占用八个字节,对double型变量赋值的时候最好加上"D"或"d",但加不加不是硬性规定。

7)char 占用两个字节,在定义字符型变量时,要用单括号括起来

8)boolean 只有两个值"true"和"false",默认值false,不能用0或非0来代替,这点和c语言不同

 

4.包装数据类型绑定

举个栗子:

只要注意: form 里的name 和Controller的参数名保持一致就可。

 

如果不想一致怎么办??

@RequestParam(value="usename",required=false) String usename_C ;

加上@RequestParam 注解。只要value值和form的name保持一致。后面的属性名可以自定义。

5.pojo(实体类)类型的绑定

举个栗子

只要pojo类中有 form 的name属性值,则会自动完成映射。

这样会有一个新问题如果类似下面的情况,绑定结果会是怎样的呢??

测试一下:

可见,两个参数都正常的绑定了。

其实从框架设计上这样的结果也是应该的!!!

今天先到这,明天更新

你可能感兴趣的:(SpringMvc-参数绑定)