SpringMVC中Controller绑定实体类参数时,Integer类型属性和int类型属性的区别

在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都会创建对应参数实体类的一个实例化对象

                  

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值