在Controller接收表单数据时,实体类参数中的属性,如果是Integer,和int有什么区别,做个简单的测试加深印象
首先先来个测试类
public class Test {
private Integer age = 10;
private String name = "lw";
public Test() {
}
public Test(int age, String name) {
this.age = age;
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后来个Controller
@RequestMapping(value = "/test.html")
public String test(@ModelAttribute Test test){
System.out.println("age---------->>"+test.getAge()+" name---------->>"+test.getName());
System.out.println(test);
return "userlist";
}
最后来个简单的表单
<form action="${pageContext.request.contextPath }/user/test.html" method="post">
<div>
age:<input name="age" id="age" type="text" value="" >
name:<input name="name" id="name" type="text" value="">
<input type="submit" value="发送">
</div>
</form>
测试结果
实体类中的参数为Integer时
1.当form表单中不输入任何值的时候 ,Integer类型的age拿到的是null,String类型的name拿到""空字符串
2..当通过url直接进入Controller中的方法时,
a.如果请求不携带参数:http://localhost:8080/eizooo/user/test.html----->>
Integer类型的age是10,String类型的name是 lw
相当于此时的参数是一个spring容器生成的一个空的新对象,得到的都是默认值,没有进行赋值
b.如果请求携带没有值的参数 http://localhost:8080/eizooo/user/test.html?age=&name=
Integer类型的age拿到的是null,String类型的name拿到""空字符串,与form表单不填值的结果相同
实体类中的参数为int时
1.当form表单中不输入任何值的时候 ,浏览器会报错
2.当通过url直接进入Controller中的方法时,
a.如果请求不携带参数: http://localhost:8080/eizooo/user/test.html
Integer类型的age拿到的是10,String类型的name拿到lw
相当于此时是一个spring容器生成的一个空的新对象,得到的都是默认值,没有进行赋值操作
b. 如果请求携带没有值的参数 http://localhost:8080/eizooo/user/test.html?age=&name=
此时会出现400错误,错误内容大致为:Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'age';
所以经过这个测试,了解到
在Controller的参数实体类中
- 当属性是基本数据类型int之类的时候,如果出现form表单未进行前端非空判断时,会出现400错误
- 当属性是基本数据类型的包装类Integer之类的时候,如果form表单未进行前端非空判断时,参数会拿到null值,
- 另外如果是String类型的属性,会拿到 "" 空字符串进行赋值
额外了解到一点就是:
SpringMVC中,Controller中的方法在被调用的时候,如果它的参数是实体类,无论有没有对这个参数进行操作赋值,springMVC都会创建对应参数实体类的一个实例化对象