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 ...
随机推荐
- scrapy shell的作用
1.可以方便我们做一些数据提取的测试代码: 2.如果想要执行scrapy命令,那么毫无疑问,肯定是要先进入到scrapy所在的环境中: 3.如果想要读取某个项目的配置信息,那么应该先进入到这个项目中. ...
- Python 属性
class Person: def __init__(self, name, gender, birth): self.name = name self.gender = gender self.bi ...
- ubuntu + samba 共享失败
主机版本:ubuntu14.04 问题描述:Samba服务配置后仍然不通. samba服务这么成熟的东西,本以为在ubuntu上修改下smb.conf重启就得了,但是访问还是失败. 表现是,可以看到s ...
- 【转载】 从ACM会议看中国大陆计算机科学与国外的差距
ps: 这是一篇06年的文章,与今日的国内计算机行业学术圈环境简直是天翻地覆,很不错的history,值得mark下,今日的cs学术发展十号是坏不发表意见,但是history是值得对比,借鉴,思考 ...
- Java中的初始化顺序
一.在创建类时为成员变量赋值和在构造函数中的赋值的先后顺序 在未用构造器之前其实已经将类的字段进行了赋值只是在调用构造器时,又将类的字段进行了重新的赋值.如下: package com.cjm.in ...
- Python之路PythonThread,第二篇,进程2
python3 进程2 僵尸进程处理方法: 3,创建二级子进程处理 4,在父进程中使用信号处理的方法忽略子进程发来的信号: signal(SIGCHLD,DIG,IGN) # 创建二级子进场解决僵 ...
- Python之路,第十二篇:Python入门与基础12
python3 函数3 装饰器 decorator *** 概念:装饰器是一个函数,主要作用是用来包装另一个函数或类: 包装的目的:是在不改变原函数名的情况下,改变被包装函数(对象)的行为. 装饰 ...
- 检查是否使用PAM认证模块禁止wheel组之外的用户su为root
编辑su文件(vi /etc/pam.d/su),在开头添加下面两行: auth sufficient pam_rootok.so 和 auth required pam_wheel.so group ...
- opencv的DMatch
1.DMatch是描述图像匹配信息的类 /** @brief Class for matching keypoint descriptors query descriptor index, train ...
- lesson3-神经序列模型I-小象
优化目标函数: batch gradient descent:必须便利all训练数据 -->随机梯度下降,但不稳定~一个数据点就更新,快但不稳定-->minibatch,取m个随机数据点, ...