springMVC数据绑定入门
数据绑定是将用户输入绑定到领域模型的一种特性。
@controller 注解使类生效
@RequestMapping(value="",meithod = RequestMethod.GET) 指定请求和方法
@RequestParam(value="",required = true)value参数别名 required 是否必传默认为true
@RequestParam("age")括号里面是age,客户端传上来的也要是age,名称要一致
请求的参数是数组的处理(参数直接设置为数组形式)
@RequestMapping(“array.do”)
@ResponseBody
public String array(String[] name){
StringBuilder sb=new StringBuilder();
for(String item:name){
sb.append(item).append("");
}
return sb.toString();
}
1、简单对象:请求方式直接写“对象的属性=XXX”即可,不用加“对象名.”的前缀;
2、多层级对象:第二级以上对象必须加“对象名.”的前缀。
如:user类里有一个属性是联系方式这个对象,那么前端传参的时候就要联系方式.联系地址(属性【对象】.属性)
同属性的多对象参数绑定: 前端请求的时候要写成user.name=Tom&admin.name=lucy&age=10
就是区分开哪个对象的哪个属性叫什么

关于List的数据绑定:
springMVC 不支持list类型的直接转换,需包装成object。
public String list(List<User> uList)这种写法是不对的
需要自己写一个类,这个类里面的某个属性是一个List集合
如:
public class UserListForm(
private List<User> uList;
) 然后Controller里:
public String list(UserListForm userListForm)
Set我们一般用来排重
使用Set的时候需要先进行初始化
要使用Set的排重功能必须在对象中覆写hashcode和equals方法。
SpringMVC对Set支持并不太好,初始化进行排重时会导致size变小,致使无法接受更多的数据而抛出异常,所以我们开发一般优先使用List。
Map传参方式:users['X'].name=Tom&users['X'].age=10&users['Y'].name=Lucy。 实际工作中那个前端跟我说,你这个传参太麻烦了,我不会传。然后我就只能报告项目经理去了。。。。。。。。。。。。
1.在参数中加注解@RequestBody( @RequestBody User user)。@RequestBody是把传过来的Json数据反序列化绑定到控制器参数上
xml 数据绑定:必须在实体类里面加注解@XmlRootElement,在属性上添加XmlElement
ex:@XmlElement(name="age"):此时就会将xml 里面对应的age数据添加到实体类中的age属性中去。
2、xml数据绑定需要“spring-oxm”这个jar包提供支持
使用PropertyEditor实现绑定时的类型转换:(数据类型转换器)
请求参数string到参数类型(也可能是任意类型)的类型转换,都是使用PropertyEditor类实现的string到任意参数的转换的。但是PropertyEditor不能实现任意对象到任意对象之间的转换,比如我们常见的Long时间戳到Date类型的转换时办不到的。
在请求的Url中设置日期类型的字符串传递的时候,报400错,说明日期绑定失败,如何使得Url中的日期与controller方法中入参类型为Date的对象绑定呢?这时,我们就需要注册自定义属性编辑器。如图,@InitBinder("date1")限定参数为date1,通过Url请求时,先执行有此注解的方法,该方法,向数据绑定器注册了新的自定义的属性编辑器,将Date类型的value设置为SimpleDateFormat("yyyy-MM-dd"),假如Url传递的参数为date1=2020-02-20,那么就会将Date参数直接格式化为yyyy-MM-dd格式,并作为controller方法的参数。完成绑定,可见,通过注解实现自定义参数绑定只需要注意两点:①使用注解,绑定传递的参数,形如@InitBinder("date1"),绑定的参数为date1,②基于此注解的方法,必须有一个参数,且参数类型为WebDataBinder,通过调用该对象的registerCustomEdior(_,_)实现自定义属性转换的注册。 @InitBinder("datel")
public void initDatel(WebDataBinder binder){
binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true))
}
true的意思是允许为空。。。
全局的自定义类型转换器需要在springmvc.xml中进行配置:
①添加一个bean类(FormattingConversionServiceFactory)并指明id="自定义",并在这个类中将自己写好的自定义类型转换器的类进行属性注入的配置,同时
②<mvc:annotation-driven conversion-service="自定义"></mvc:annotation>
如上两步,以及自定义类型转换器,将实现Url传入参数的自定义转换。

自己写的Converter类

RESTful表现层状态转化
RESTful在控制层的具体应用:
RESTful总结:
springMVC数据绑定入门的更多相关文章
- 《SpringMVC数据绑定入门》笔记
基本类型 最好使用封装类型 简单多数据&多层级对象 简单多数据 单个对象,直接使用属性名=值即可 多层级对象 属性.属性=值即可 同属性多对象 WebDataBinder只在当前类中生效,不是 ...
- SpringMVC:数据绑定入门(-)
1.数据类型,可以绑定基本数据类型,如int age,或者包装类型如:Integer age; 两者的区别:int 类型时,必填该参数,Integer 可以为空. 2.绑定数组 , 3.绑定对象. 3 ...
- SpringMVC:数据绑定入门(二)
1.为了实现所输入的数据格式与所需要的匹配该如何做到?例如:http://localhost:8080/date1.do?date1=2018-01-01,其中输入的date1的数据类型为一个格式为& ...
- SpringMVC基础入门
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- SpringMVC基础入门,创建一个HelloWorld程序
ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要 ...
- 2.学习SpringMVC注解入门篇
一.SpringMVC执行流程 . 二.创建项目学习SpringMVC注解 按照我之前的SpringMVC创建项目,首先创建一个项目springmvc01,配置好pom.xml,web.xml,spr ...
- SpringMVC从入门到精通之第四章
第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面.中间的业务逻辑是调用业务类处理的这个就是MVC设计模 ...
- SpringMVC简单入门
SpringMVC简单入门 与大家分享一下最近对SpringMVC的学习,希望本文章能对大家有所帮助. 首先什么是SpringMVC? Spring 为展现层提供的基于MVC设计理念的优秀的Web框架 ...
- SpringMVC 快速入门
SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...
随机推荐
- 配置MAVEN环境变量
在配置maven前一定要先配置java jdk 的环境变量 和java配置一样 先写一个MAVEN_HOME:F:\java\apache-maven-3.5.2 (就是你maven 的下载位置) 写 ...
- HDU1548- A strange lift (BFS入门)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A Strrange lift Time Limit: 2000/1000 MS (Java/ ...
- qt 内置图标使用
QToolButton *button = new QToolButton(this); button->resize(100,30); button->setToolButtonStyl ...
- 从boost到Adaboost再到GBRT-GBDT-MART
本文是要配合<统计学习方法>才能看懂的,因为中间有些符号和定义是直接使用书本中的 先弄明白以下三个公式: 1)Boost(提升法)=加法模型(即基函数的线性组合)+前向分步算法+损失函数 ...
- 关于Adaboost——样本抽样的权值的实际意义
看这篇文章的前提:已经看了PRML中的Adaboost的算法流程 看懂下面的内容必须牢牢记住:Adaboost使用的误差函数是指数误差 文章主要目的:理解样本抽样的权值是为什么那样变化的. 得出的结论 ...
- Educational Codeforces Round 54 ---1076ABCDE
1076A---Minimizing the String[字符串] http://codeforces.com/contest/1076/problem/A 题意: 删掉字符串中的一个字符使得得到的 ...
- js-自加和自减
i++ 返回的是自增之前的值 先利用再加 ++i 返回的是自增之后的值 先加再利用
- (0)MySQL 的指令(包含了解知识点)
第七章索引:入门安装 - 增删改查基本操作 - 外键(不同表之间的关联) - 数据库的建立和操作 - MySQL的查询操作(模糊.通配.限制符等) - MySQL的引擎 - MySQL的事物(数据回滚 ...
- git使用之放弃本地修改
一,未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “-- ...
- Sencha Touch app example -- oreilly app 分析
from: 2013/8/30的笔记 使用development.js 读取 app.json 配置文件 app.json 配置了app.js文件 app.js lauch function ,首先用 ...