绑定基本数据类型

  Java基本数据类型int的默认值是0,在使用int进行url传递参数时,参数key是必须写的,其值也只能是int类型的,否则将会报错。

  比如方法:

  @RequestMapping(value = baseType.do) @ResponseBody //返回的数据放到ResponseBody的数据区中 public String baseType(int age){ return age:+age; }

  请求的url地址:http://localhost:8080/baseType.do?age=10,其中参数age是必传的,其值只能是int类型的;

  如果不传,将会报500错误。比如:http://localhost:8080/baseType.do

  如果传递了,但是数据类型是其他类型,将会报400错误,比如:http://localhost:8080/baseType.do?age=abc

  又比如方法:

  @RequestMapping(value=baseType1.do) @ResponseBody public String baseType1(@RequestParam(value=xage)int age){ return age: + age; }

  我们可以使用@RequestParam注解来为传入的参数,定义一个别名参数,

  @RequestParam(value=,required = true)value参数别名 required 该参数是否必传,默认为true;

  访问的url地址如下:

  http://localhost:8080/baseType1.do?xage=10

  同样xage这个参数也是必传的,其类型为int。

  如果是其他基本数据类型也是如此,其中

  byte,short,int的默认值都为0,long的默认值为0L,float的默认值为0.0f,double的默认值为0.0d

  在进行数据绑定时,其参数值必传,其值的类型为其对应的基本数据类型。

  绑定封装数据类型

  Java封装类型Integer的默认值为null,在使用Integer进行url数据传递时,参数key可以不传,对应参数的值就会默认为null。

  比如方法:

  @RequestMapping(value = baseType2.do) @ResponseBody public String baseType2(Integer age){ return age:+age; }

  其url地址参数age可以不传,也可以传,对应的url地址如下:

  http://localhost:8080/baseType2.do?age=10

  http://localhost:8080/baseType2.do

  但是如果传递了age参数,其值为其他数据类型,将会报400错误,比如:http://localhost:8080/baseType2.do?age=abc

  数据绑定的数值型接受参数可以是基本类型和包装类型,但二者有区别:

  1、基本类型不可接受空值,会报错。且输入数值必须在指定数据类型的数据范围内

  2、包装类型则可以接受空值,具有优势,推荐使用,比如传递的参数是年龄、身高、长度、宽度等,具体情况可根据业务需要进行变更。

  绑定数组类型

  Java数组:它是一个具有相同数据类型,固定大小的对象。

  绑定数组类型的方法如下:

  @RequestMapping(value = array.do) @ResponseBody public String array(String[] name){ StringBuilder sbf = new StringBuilder(); StringBuffer sb = new StringBuffer(); for(String item : name){ sbf.append(item).append( ); } return sbf.toString(); }

  在使用url地址传递参数时,一次可以传递多个参数值,值与值之间使用分开,如下:

  http://localhost:8080/array.do?name=Tomname=Lucyname=Jim

  绑定对象类型

  这里以绑定User对象为例,绑定的方法如下:

  @RequestMapping(value=/user) @ResponseBody public String GetUser(User user){ return user.toString(); }

  使用url传递参数的方式如下:

  http://localhost:8080/user?name=Tomage=10

  其中name、age都是User对象的属性。

  对象类型的数据绑定,直接请求时对应其属性即可,不必添加前缀,如User类的属性name,则直接在请求中使用name=xxx,而不是使用user.name=xxx的形式。url如下:

  http://localhost:8080/user?name=Tomage=10

  但如果是想对对象中对象的属性再赋值的话,则需要使用xxx.xxx的形式,如下的contactInfo.phone表示将User类中的ContactInfo类的phone属性赋值。 如下:

  http://localhost:8080/object.do?name=Tomage=10contactInfo.phone=10086

  两个对象同属性进行数据绑定

  这里以User对象和Admin对象为例,这两个对象具有相同的属性name,age,这两个对象进行数据绑定的方法如下:

  @RequestMapping(value = object.do) @ResponseBody public String object(User user,Admin admin){ return user.toString()+ +admin.toString(); }

  在这里是有Spring注解@InitBinder来初始化一个对象。

  对于两个不同的类,遇到同名属性的情况,SpringMVC会默认针对所有类的同名属性赋值,如下面url传递的name,age参数将是两个对象共有的:

  http://localhost:8080/object.do?name=Tomage=10

  如果想要区别对待,直接使用xxx.xxx的形式是不行的,还需要在对应的Controller中定义方法,

  以 @InitBinder 注解标记属性名,形参使用 WebDataBinder 来定义请求参数前缀,若没加前缀则是共有的。方法定义如下:

  @InitBinder(user) //@InitBinder 初始化一个对象 public void initUser(WebDataBinder binder){ binder.setFieldDefaultPrefix(user.); } @InitBinder(admin) public void initAdmin(WebDataBinder binder){ binder.setFieldDefaultPrefix(admin.); }

  使用url传递参数,如下:

  http://localhost:8080/object.do?user.name=Tomadmin.name=Lucyage=10

  其中age参数是两个对象共用的。

  绑定List对象

  Java中List集合类型:List是一个有序,可重复的的线性表。

  在绑定List对象数据时,首先要将对象封装为List对象,并设置它的get/set方法,以User对象为例,封装如下:

  private List users;

  然后controller下对应的方法定义如下:

  @RequestMapping(value = list.do) @ResponseBody public String list(UserListForm userListForm){ return listSize:+userListForm.getUsers().size() + + userListForm.toString(); }

  其中UserListForm是封装的List对象类,使用url传递参数的方式如下:

  http://localhost:8080/list.do?users[0].name=Tomusers[1].name=Lucy

  Controller中List参数不能直接传值,需要一个包裹类,类中有需要传的List作为属性和对应的get,set方法。 传值时用users[0].name = Tom users[1].name = Luce 一定不要跳跃传值,如users[0].name = Tomusers[20].name = Lucy 这样中间的1~19也会占用资源属性值为空。

  http://localhost:8080/list.do?users[0].name=Tomusers[1].name=Lucyusers[20].name=Jim

  绑定Map对象

  Java中Map集合对象:Map是一个基于kay-value键值对的集合类型,它是无序的,其中键key不可重复,值value可以重复。

  在绑定Map对象数据时,首先要将对象封装为Map对象,并设置它的get/set方法,以User对象为例,封装如下:

  private MapString,User users;

  然后controller下对应的方法定义如下:

  @RequestMapping(value = map.do) @ResponseBody public String map(UserMapForm userMapForm){ return userMapForm.toString(); }

  其中UserMapForm是封装的Map对象,使用url传递参数的方式如下:

  http://localhost:8080/map.do?users[‘X’].name=Tomusers[‘X’].age=10users[‘Y’].name=Lucy

  其中X,Y是key,类型是String类型。

  绑定Set对象

  Java中Set集合对象:Set集合无序,且不可重复,因为它重写了hashCode()方法和equals()方法;

  Set集合在实际的应用中,常用于对象的重复判断或者排除重复。

  在SpringMVC中绑定Set数据类型,接口的参数形式和绑定list是类似的,都是通过索引。但是不同的在于,Set必须初始化,它必须先包含了初始化对象,也即是说必须提前手动分配好空间,才能进行赋值,而使用List则没有这个要求。

  另外的一个坑在于,初始化Set时需要留意对象的equals方法,假如我们在提前分配两个对象空间时,两个对象通过equals方法判断为相同,则我们期望的Set的size为2,最后实际因为去重变成了1,导致在数据绑定时很容易出现数组越界的异常。

  Set集合类型:我们一般用来排重 使用Set的时候需要先进行初始化 要使用Set的排重功能必须在对象中覆写hashcode和equals方法。 SpringMVC对Set支持并不太好,初始化进行排重时会导致size变小,致使无法接受更多的数据而抛出异常,所以我们开发一般优先使用List。

  在绑定Set对象数据时,首先要将对象封装为Set对象,并设置它的get/set方法,并提供构造方法,封装如下:

  private SetUser users; private UserSetForm(){ users = new LinkedHashSetUser(); users.add(new User()); //定义两个对象 users.add(new User()); }

  其次还要重写User对象的hashCode()方法和equals()方法

  然后controller下对应的方法定义如下:

  @RequestMapping(value = set.do) @ResponseBody public String set(UserSetForm userSetForm){ return userSetForm.toString(); }

  其中UserSetForm是封装的Set对象,使用url传递参数的方式如下:

  http://localhost:8080/set.do?users[0].name=Tomusers[1].name=Lucy

  且不可跳范围传值,如下:

  http://localhost:8080/set.do?users[0].name=Tomusers[20].name=Lucy将会报错。

  绑定XML对象

  Java绑定XML对象:XML是一种扩展标记语言,常用来存储或传输数据。

  对于xml类型的数据绑定,需要在方法形参上增加注解 @RequestBody,并且在Post请求时请求头为Content-Type: application/xml。

  这样SpringMVC就会调用对应的解析器去解析,所以我们同时还需要在pom中添加xml解析的相关依赖 spring-oxm ,如下:

  dependency

  groupIdorg.springframework/groupId

  artifactIdspring-oxm/artifactId

  version4.0.0.RELEASE/version

  /dependency

  将xml对应的实体类进行注解标注,根节点放在类名,并使用name属性设定对应的xml中的根节点名称,其他节点同理。

  对于Admin对象的name,age属性定义为xml,格式如下:

  ?xml version=1.0 encoding=UTF-8 ?

  Jim 16 xml 数据绑定:必须在实体类里面加注解@XmlRootElement,在属性上添加XmlElement。定义如下:

  @XmlRootElement(name=admin) public class Admin { private String name; private Integer age; @XmlElement(name=name)public String getName() { return name;}public void setName(String name) { this.name = name;}@XmlElement(name=age)public Integer getAge() { return age;}public void setAge(Integer age) { this.age = age;}@Overridepublic String toString() { return Admin{ + name=' + name + '\'' + , age= + age + '}';}}

  ex:@XmlElement(name=“age”):此时就会将xml 里面对应的age数据添加到实体类中的age属性中去。

  然后controller下对应的方法定义如下:

  @RequestMapping(value = xml.do) @ResponseBodypublic String xml(@RequestBody Admin admin){ return admin.toString();}

  url请求地址为:

  http://localhost:8080/xml.do, 请求头为Content-Type: application/xml.

  绑定Json对象

  Java绑定Json对象:JSON 是轻量级的文本数据交换格式,常用于存储和交换文本信息。

  SpringMVC接受http中body的json格式内容为参数,在方法的形参前加上注解 @RequestBody,用以调用解析器进行转换,值得注意的是:

  1、在参数中加注解@RequestBody( @RequestBody User user)。@RequestBody是把传过来的Json数据反序列化绑定到控制器参数上。

  controller中方法定义如下:

  @RequestMapping(value = json.do) @ResponseBody public String json(@RequestBody User user){ return user.toString(); }

  2、pom.xml文件中引入依赖jar包,如下:

  dependency

  groupIdorg.codehaus.jackson/groupId

  3、http请求头:Content-Type: application/json。

  url请求地址为:

  http://localhost:8080/json.do

SpringMVC实现多种数据类型绑定的更多相关文章

  1. SpringMVC介绍及参数绑定

    本节内容: SpringMVC介绍 入门程序 SpringMVC架构 SpringMVC整合MyBatis 参数绑定 SpringMVC和Struts2的区别 一.SpringMVC介绍 1. 什么是 ...

  2. [Spring MVC] - SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  3. SpringMVC的各种参数绑定方式

    1. 基本数据类型(以int为例,其他类似):2. 包装类型(以Integer为例,其他类似):3. 自定义对象类型:4. 自定义复合对象类型:5. List绑定:6. Set绑定:7. Map绑定: ...

  4. SpringMVC详解------参数绑定

    SpringMVC详解------参数绑定  转载于:https://blog.csdn.net/swebin/article/details/92795422 目录 1.SpringMVC 参数绑定 ...

  5. springmvc的初始化参数绑定

    一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时  重要的是参数类型 -------------------单日期的绑定 二. 配 ...

  6. Cassandra在CQL语言层面支持多种数据类型

    Cassandra在CQL语言层面支持多种数据类型. CQL类型 对应Java类型 描述 ascii String ascii字符串 bigint long 64位整数 blob ByteBuffer ...

  7. 【原创】C++链表如何像Python List一样支持多种数据类型

    用过Python的码友都知道,Python中List支持多种数据类型,如下面代码所示链表li内的数据类型可以是整数,同时也可以是字符串,当然也可以是其他数据类型. 1: >>> li ...

  8. springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用

    springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用 主要内容: 这篇文章主要是总结之前使用springmv接收json的时候遇到的问题,下面通过前台发送a ...

  9. 《ServerSuperIO Designer IDE使用教程》-3.Modbus协议,读取多个寄存器,实现多种数据类型解析。发布:v4.2.2版本

    更新内容,v4.2.2版本:1.增加Modbus协议读取多个寄存器,并且按多种数据类型解析数据.2.Modbus Serial和Modbus TCP两个驱动合并成一个驱动.3.修改数据库结构,保存配置 ...

随机推荐

  1. docker命令及操作

    docker pull 镜像名字 dockers images docker image ls docker image rm 镜像名/镜像ID docker ps docker ps -a dock ...

  2. Django中的admin组件分析

    admin的使用介绍 django-admin的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 setting ...

  3. Hive 数据类型转换

    在Hive的日常使用中经常会遇到需要对字段进行数据类型转换的情况.Hive中的数据类型转换包括隐式转换(implicit conversions)和显式转换(explicitly conversion ...

  4. pm2 观察报错时 pm2 start app.js --watch

    pm2 start app.js --watch[PM2][ERROR] Script already launched, add -f option to force re-execution

  5. centos 安装 jdk8和comcat8

    1.去官网下载Linux版本的jdk8 2.进入ags,把tar.gz的压缩包拷贝到用户下指定目录java,然后解压 mkdir /home/ags/java tar -zxv -f jdk-8u11 ...

  6. PHP-ThinkPHP5砍价活动相关设计

    近期我们公司项目里陆陆续续有很多为了招引新用户的活动推出,砍价的活动由我来负责,我们的项目是在微信浏览器里供用户浏览访问. 大概描述:进入砍价活动列表页选择有意向的商品,用户点击商品图片可以看到WEB ...

  7. bzoj1660 / P2866 [USACO06NOV]糟糕的一天Bad Hair Day

    P2866 [USACO06NOV]糟糕的一天Bad Hair Day 奶牛题里好多单调栈..... 维护一个单调递减栈,存每只牛的高度和位置,顺便统计一下答案. #include<iostre ...

  8. Jsp中如何通过Jsp调用Java类中的方法

    Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...

  9. troubleshooting-When importing query results in parallel, you must specify --split-by.

    原因分析 -m 4 \ 导数命令中map task number=4,当-m 设置的值大于1时,split-by必须设置字段(需要是 int 类型的字段),如果不是 int类型的字段,则需要加上参数- ...

  10. 20145314郑凯杰《网络对抗技术》实验9 web安全基础实践

    20145314郑凯杰<网络对抗技术>实验9 web安全基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET ...