controller接收json数据_SpringMVC实现多种数据类型绑定

点击上方“放学等我”,选择“置顶公众号”

精品文章,第一时间送达

5e235fec99c2ae1d787dabc738b2029e.png

绑定基本数据类型

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=Tom&name=Lucy&name=Jim

绑定对象类型

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

@RequestMapping(value="/user")

@ResponseBody

public String GetUser(User user){

return user.toString();

}

使用url传递参数的方式如下: http://localhost:8080/user?name=Tom&age=10 其中name、age都是User对象的属性。

对象类型的数据绑定,直接请求时对应其属性即可,不必添加前缀,如User类的属性name,则直接在请求中使用name=xxx,而不是使用user.name=xxx的形式。url如下: http://localhost:8080/user?name=Tom&age=10 但如果是想对对象中对象的属性再赋值的话,则需要使用xxx.xxx的形式,如下的contactInfo.phone表示将User类中的ContactInfo类的phone属性赋值。 如下: http://localhost:8080/object.do?name=Tom&age=10&contactInfo.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=Tom&age=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=Tom&admin.name=Lucy&age=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=Tom&users[1].name=Lucy

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

绑定Map对象

Java中Map集合对象:Map是一个基于kay-value键值对的集合类型,它是无序的,其中键key不可重复,值value可以重复。 在绑定Map对象数据时,首先要将对象封装为Map对象,并设置它的get/set方法,以User对象为例,封装如下:

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

java@RequestMapping(value="map.do")
@ResponseBody
publicStringmap(UserMapFormuserMapForm){
returnuserMapForm.toString();
}
其中UserMapForm是封装的Map对象,使用url传递参数的方式如下: http://localhost:8080/map.do?users[‘X’].name=Tom&users[‘X’].age=10&users[‘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 Set<User> users;

private UserSetForm(){

users = new LinkedHashSet<User>();

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=Tom&users[1].name=Lucy 且不可跳范围传值,如下: http://localhost:8080/set.do?users[0].name=Tom&users[20].name=Lucy 将会报错。

绑定XML对象

Java绑定XML对象:XML是一种扩展标记语言,常用来存储或传输数据。 对于xml类型的数据绑定,需要在方法形参上增加注解 @RequestBody,并且在Post请求时请求头为Content-Type: application/xml。 这样SpringMVC就会调用对应的解析器去解析,所以我们同时还需要在pom中添加xml解析的相关依赖 spring-oxm ,如下:

org.springframework

spring-oxm

4.0.0.RELEASE

将xml对应的实体类进行注解标注,根节点放在类名,并使用name属性设定对应的xml中的根节点名称,其他节点同理。 对于Admin对象的name,age属性定义为xml,格式如下:

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;

}

@Override

public String toString() {

return "Admin{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

ex:@XmlElement(name=“age”):此时就会将xml 里面对应的age数据添加到实体类中的age属性中去。 然后controller下对应的方法定义如下:

@RequestMapping(value = "xml.do")

@ResponseBody

public 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包,如下:

org.codehaus.jackson

jackson-mapper-asl

1.9.9

3、http请求头:Content-Type: application/json。 url请求地址为: http://localhost:8080/json.do

作者:霜花似雪 链接:https://www.imooc.com/article/267808 来源:慕课网 本文原创发布于慕课网 ,转载请注明出处,谢谢合作

 • end • 


本公众号免费提供csdn下载服务,海量IT学习资源,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端 等资源。同时我们组建了一个技术交流群,里面有很多大佬,会不定时分享技术文章,如果你想来一起学习提高,可以公众号后台回复【2】,免费邀请加技术交流群互相学习提高,会不定期分享编程IT相关资源。


扫码关注,精彩内容第一时间推给你

00f4aa5475e60f18d0e8af45234dc852.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初中学历在辽宁学计算机,在辽宁省实验中学学习是怎样一番体验?

本人姓名&#xff1a;韩杨泰衍。辽宁省实验中学2012届毕业生&#xff0c;2012年高考考入清华大学。第一次在知乎上写回答&#xff0c;有言语不当之处还请各位看官见谅。体验之一&#xff1a;学习上不断积累与释放的自卑感&#xff0c;伴随着不断获得和失去的荣誉。我2009年中考…

宝塔设置thinkphp的伪静态_宝塔面板与WDCP狭路相逢,谁才是国产之光?

我本来想给大家写一篇工具类的杂谈&#xff0c;思来想去又想到了可视化面板&#xff0c;就目前国产面板而言&#xff0c;WDCP、宝塔面板、AMH等&#xff0c;说是群雄逐鹿一点都不为过&#xff0c;AMH4.2之后&#xff0c;可以说是走了相当一部分人&#xff0c;暗示收费版本&…

计算机桌面打标签,在电脑桌面上添加便签的方法步骤详解(2)

电脑的桌面便签软件推荐1、CintaNotes电脑的桌面便签软件推荐图1CintaNotes是一款非常轻巧实用的笔记软件,可看作EverNote轻量级替代品。CintaNotes只需1个exe,体积仅1MB,却拥有EverNote易于收集、实时搜索、条状排列、tag分类的优点,更有EverNote 所不具备的中文搜索、纯文本更…

windows。forms.timer设置第一次不等待_适用于初学者的中线交易策略——金叉的三种设置条件...

本文将介绍了使用移动平均线最重要的方法之一——金叉。我们将描述该信号的产生条件&#xff0c;然后深入探讨一下三个交易案例。什么是金叉?当短期移动平均线与长期移动平均线相交时&#xff0c;黄叉就会产生。听起来确实很简单。然而&#xff0c;关键是构成交叉的移动平均线…

html如何做卷展菜单,3DMax“对象属性”卷展栏如何操作?有啥秘诀呢?

“动画”菜单 “骨骼工具”“骨骼工具”浮动框 “对象属性”卷展栏。使用骨骼“对象属性”卷展栏上的控件可以将其他对象转变为骨骼。这些控件还可以控制骨骼的刚性及对齐方式。注意使用“重置缩放”选项可以重置骨骼的缩放。1、启用/禁用骨骼启用此选项后&#xff0c;选定骨骼…

python多线程写同一个文件_Python多线程快速写入文件,python,飞速

Python多线程快速写入文件,python,飞速 发表时间&#xff1a;2020-07-10 乱序多线程写入 举个最简单的例子&#xff0c;只要求快速写入即可&#xff0c;对顺序无要求时&#xff1a; import threading def write_string(string, path"test.csv"): with open(path, a) …

2021山东科技大学计算机学院,2021年3月山东科技大学计算机等级考试报名工作通知...

【导语】2021年3月山东科技大学计算机等级考试报名工作通知已公布&#xff0c;为了方便广大考生的查阅&#xff0c;下面无忧考网为您详细介绍一下本次计算机等级考试报名的具体事宜&#xff0c;希望广大考生及时关注&#xff0c;如有相关疑问&#xff0c;敬请关注无忧考网为您实…

怎么查看电脑有没有python_python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学...

本文由简码编程原创&#xff0c;保留所有版权&#xff0c;转载请注明出处。 本python人工智能爬虫系列教程基于Python3.0版本, 将python结合windows桌面开发工具aardio一起做可视化的开发, 用python做逻辑处理,用aardio做窗口界面, 不用再看着黑黑的python命令行窗口, 有window…

html表头的标签,HTML 表头单元格标签

HTML 标签标签定义及使用说明 标签定义 HTML 表格中的表头单元格。HTML 表格有两种单元格类型&#xff1a;表头单元格 - 包含头部信息(由 元素创建)标准单元格 - 包含数据(由 元素创建) 元素中的文本通常呈现为粗体并且居中。 元素中的文本通常是普通的左对齐文本。浏览器支持…

python3安装pymysql_python安装PyMySQL

官网操作教程&#xff1a;http://www.runoob.com/python3/python3-mysql.html 1、简介 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库&#xff0c;Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&#xff0c;并包含了 pure-Python MySQL 客…

计算机控制系统课程设计中期报告,课程设计中期报告模板.doc

课程设计中期报告模板概要新疆大学信息科学与工程学院《程序设计》课程设计中期报告题目&#xff1a;专 业 计算机科学与技术学 生 姓 名学 号联 系 方 式班 级 计算机15-班组 员 姓 名联 系 方 式检 查 日 期 2016.7.29新疆大学信息科学与工程学院目 录1. 课程设计内容概述11.…

python中计算如何实现_基于python如何实现计算两组数据P值

我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性。 一、代码# TTest.py # -*- coding: utf-8 -*-# Created on 2020-05-20 20:36 # TTest.py # author: huiwenhua## Import the packages import numpy as np from scipy import stat…

计算机配件推荐系统论文摘要,个性化推荐系统设计

内容简介&#xff1a;个性化推荐系统设计&#xff0c;毕业设计&#xff0c;共65页&#xff0c;29540字&#xff0c;附外文翻译。摘要个性化推荐系统根据用户的历史数据&#xff0c;利用推荐算法向他们推荐可能感兴趣的商品。协同过滤(CF)是目前研究最多、应用最广泛的推荐算法&…

python自定义函数画图_python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条...

自定义colorbar&#xff08;draw colorbar without any mapple/plot&#xff09; 参考&#xff1a;Customized Colorbars Tutorial api example code: colorbar_only.py 自定义colorbar可以画出任何自己想要的colorbar&#xff0c;自由自在、不受约束&#xff0c;不依赖于任何已…

长沙理工大学计算机考研难吗,长沙理工大学考研难吗?一般要什么水平才可以进入?...

首先&#xff0c;申明一点&#xff1a;考研本身就不是一件容易的事情&#xff0c;在考研的过程中&#xff0c;找准自己的定位、学会搜集资料、搜集信息并且辅之于踏实的备考、准确的方法是至关重要的。同时&#xff0c;要学会坚持&#xff0c;不忘初心&#xff0c;很多同学在开…

如何用python创建文件_如何使用Python创建新的文本文件

我正在python中练习.txt文件的管理.我一直在阅读它,发现如果我尝试打开一个不存在的文件,它将在程序执行的同一目录上创建它.问题是,当我尝试打开它时,我收到此错误&#xff1a; IOError: [Errno 2] No such file or directory: ‘C:\Users\myusername\PycharmProjects\Tests\c…

域内计算机如何同步网络t时间,网络节点的同步方法

摘要&#xff1a;包括一个网络中心主节点(11)和多个同步域(20,30)的局域网(10)内的网络节点的同步方法,每个同步子网(20,30)包括一个同步子网主节点(21,31)和至少一个同步从节点(22,23;32,33),所述方法包括以下步骤:为每个同步域(20,30)设立或改变一个多播组,其中,一个多播组包…

python绘制饼图程序_python使用Matplotlib绘制饼图

一、函数原型 plt.pie(x, explodeNone, labelsNone, colorsNone, autopctNone, pctdistance0.6, shadowFalse, labeldistance1.1, startangleNone, radiusNone, counterclockTrue, wedgepropsNone, textpropsNone, center(0, 0), frameFalse) 参数&#xff1a; x&#xff1a;绘…

高龄申请海外计算机科学博士,【原创】牛津在读小博谈谈在海外攻读生命科学专业的一些心得...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一&#xff0e; 生物化学研究的是什么&#xff1f;生物化学&#xff0c;顾名思义&#xff0c;研究的是在生命体内发生的化学反应。从化学的角度看&#xff0c;在任何生命体内无时不刻地发生着各种化学反应&#xff0c;反应的数量随…

python变量类型有几种_python十种变量类型

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。因此&#xff0c;变量可以指定不同的数据类型&#xff0c;这些变量可以存储整数&#xff0c;小数或…