SpringMVC数据绑定一(基本数据类型及包装类型)

本文介绍了SpringMVC中数据绑定的基本概念,包括如何处理基本数据类型和包装类型。当遇到int和float类型的空值时,推荐使用Integer和Float的包装类型。此外,通过自定义变量名实现控制器函数参数与表单数据的对应。文中还提到,使用@ResponseBody注解可以在AJAX请求中返回正确的HTTP状态码,避免因未指定跳转页面导致的400 Bad Request错误。同时,解释了@RequestBody和@ResponseBody的作用,前者用于读取请求体数据并绑定到方法参数,后者将方法返回对象转换为特定格式并写入响应体。
摘要由CSDN通过智能技术生成

以下均是在环境配置好的情况下执行
1.基本数据类型及包装类型:

根据文本域的name属性值
jsp表单:

  <form action="name.do" method="post">
  <label>书名:</label><input type="text" id="bookName" name="bookName">
  <label>编号:</label><input type="text" id="bookId" name="bookId">
  <label>分类:</label><input type="text" id="bookCategroy" name="bookCategroy">
  <label>价格:</label><input type="text" id="bookPrice" name="bookPrice">
  <input type="submit" id="subName" value="提交" >
  </form>

controller代码:

     @RequestMapping(value="name.do")
     @ResponseBody
     public void nameBimds(String bookName,int bookId,String bookCategroy,float bookPrice){
         System.out.println("书名:"+bookName);
         System.out.println("分类:"+bookCategroy);
         System.out.println("编号:"+bookId);
         System.out.println("价格:"+bookPrice);
     }

基本数据类型绑定最基本的方法就是jsp表单中文本标签属性name值与后台Controller中函数名称一致,即可完成数据绑定。
但是对于int和float类型的数据,如果前台传值为null或”“,则会出现数据转换异常,前台浏览器提示状态值400 bad request无效的请求,在SpringMVC中很可能就是类型不匹配。在实际开发中可以使用对应的基本数据类型的包装类型:Integer(int),Float(float)

     public void nameBimds(String bookName,Integer bookId,String bookCategroy,Float bookPrice){ ......}

自定义变量名(只是在controller中函数参数可以与name值不一致)
前台不变
Controller

     @RequestMapping(value="name.do")
     @ResponseBody
     public void nameBimds(@RequestParam("bookName")String Name,@RequestParam("bookId")Integer Id,@RequestParam("bookCategroy")String Categroy,@RequestParam("bookPrice")Float Price){
         System.out.println("书名:"+Name);
         System.out.println("分类:"+Categroy);
         System.out.println("编号:"+Id);
         System.out.println("价格:"+Price);
     }

可以发现其实还是指明数据绑定对应规则,即jsp表单值与函数参数值如何一一对应。
大家可以看到在函数前有@ResponseBody,到底什么作用那?在执行这个函数后会跳到一个空白的页面而不是原来的页面(没有写跳转代码),在ajax代码中这个问题就会暴露出来了,也会费解,这里记录一下(网上找的)
Ajax请求通过XMLHttpRequest对象发送请求,该对象有四个状态(readyState):
0-未初始化
1-正在初始化
2-发送数据
3-正在发送数据
4-完成
当XMLHttpRequest.readyState为4时,表示请求已经完成可以得到响应结果。当然success和error方法还是根据响应状态码来触发。当XMLHttpRequest.status为200的时候,表示响应成功,此时触发success().其他状态码则触发error().
除了根据响应状态码外,ajax还会在下列情况下走error方法:
1. 返回数据类型不是JSON
2. 网络中断
3. 后台响应中断
js中ajax代码请求添加提交按钮onclick函数 jsp去掉form标签,否则不能识别函数

function subName(){
    $.ajax({
        url:'name.do',
        type:'post',
        data:{
            bookName:$("#bookName").val(),
            bookId:$("#bookId").val(),
            bookCategroy:$("#bookCategroy").val(),
            bookPrice:$("#bookPrice").val()
        },
        success:function(){
            alert("success");
        },
        error:function(){
            alert("error");
        }
    });
}

提交后会发现后台正确执行,前台却执行error函数,挺急人,数据没有错,name就是没有返回正确的状态码200,前台显示状态码400 bad request,这就找到问题所在了,后来查找说是SpringMVC默认是跳转页面的,如果没有指定跳转页面,那么就必须标记@ResponseBody,从而可以返回前台200状态码。
这里在介绍一下@ResponseBody和@RequestBody
@RequestBody
作用:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
结合上面知识在前台浏览器资源中可以看到200的response 里面有绑定的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值