SpringMVC 的数据绑定
1、数据自动绑定
SpringMVC 框架支持不需要任何数据绑定的注解直接将表单参数绑定到我们的执行方法的参数上。
表单参数:包括 POST 以及 GET 发送过来的参数
就是以内容类型为:enctype="application/x-www-form-urlencoded"的参数

参数变量绑定:
前台代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
用户登录<br/>
<form action="${pageContext.request.contextPath }/user/login.mvc" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="text">
<input type="submit" value="登录">
</form>
</body>
</html>
后台代码:
package cn.mgy.controller; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
@RequestMapping(value="user")
public class UserController { /**
* 接收的请求,必须是POST
* @return
*/
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(HttpSession session,String password,String username){ System.out.println("-登录-user"+username);
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
session.setAttribute("username", username);
session.setAttribute("password", password);
return "/hello.jsp";
}
}
2、将数据自动绑定到 JavaBean
注意:请求界面的参数名与JavaBean的字段要一致
请求页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
用户注册1<br/>
<form action="${pageContext.request.contextPath }/user/register.mvc" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="text">
性别:<input name="sex" type="text">
年龄 <input name="age" type="text">
<input type="submit" value="注册">
</form>
</body>
</html>
实体类(JavaBean):
package cn.mgy.entity;
/**
* SpringMVC会自动的将
* <input name="username" type="text">
* 的name属性绑定JavaBean的getUsername方法和setUsername
* @author ranger
*
*/
public class User { private String password;
private String username;
private int age;
private String sex; public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
System.out.println("--"+username);
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
后台代码:
package cn.mgy.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import cn.mgy.pojo.User; @Controller
@RequestMapping(value="/user")
public class UserController { /**
* 接收的请求,必须是POST
* @return
*/
@RequestMapping(value="register",method=RequestMethod.POST)
public String register(User user){ System.out.println("-注册-user");
System.out.println("用户名:"+user.getUsername());
System.out.println("密码:"+user.getPassword());
System.out.println("年龄"+user.getAge());
System.out.println("性别:"+user.getSex()); return "/hello.jsp";
} }
3、自动绑定数据到数组
注意事项:
(1)数组的类型只能是 Spring 内置已经实现的类型(如:MultipartFile)以及标量类型。
标量类型 = String + 基础数据类型 + 基础数据类型包装类
(2)页面的参数必须要同名
请求页面:
<p>发送一组用户名</p> <br/>
<form action="${pageContext.request.contextPath }/user/listuser.mvc" method="post">
用户名1:<input name="username" type="text">
用户名2:<input name="username" type="text">
用户名3:<input name="username" type="text">
用户名4 :<input name="username" type="text">
<input type="submit" value="发送">
</form>
后台代码:
@RequestMapping(value="listuser",method=RequestMethod.POST)
public String listuser(String[] username){ for(String uname:username){
System.out.println(uname);
} return "/hello.jsp";
}
4、集合的自动封装
SpringMVC 的执行方法的参数不支持集合数据直接自动绑定的。需要将集合转换成一个 JavaBean 的类型,把集合作为 JavaBean 的一个属性来实现。
请求页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>需求,使用一个集合来接收这个数据,而且每一组分别存在不同的实体里面发送一组用户名</p>
<form action="${pageContext.request.contextPath }/user/listuser2.mvc" method="post">
<!-- users表示是UsersModel的属性,setUsers [0],表示放在集合的第一元素-->
用户名1:<input name="users[0].username" type="text"> <br/>
密码1:<input name="users[0].password" type="text"> <br/> 用户名2:<input name="users[1].username" type="text"><br/>
密码2:<input name="users[1].password" type="text"> <br/> 用户名3:<input name="users[2].username" type="text"><br/>
密码3:<input name="users[2].password" type="text"> <br/> 用户名4 :<input name="users[3].username" type="text"><br/>
密码4:<input name="users[3].password" type="text"> <br/>
<input type="submit" value="发送">
</form>
</body>
</html>
实体类(JavaBean):
package cn.mgy.entity;
/**
* SpringMVC会自动的将
* <input name="username" type="text">
* 的name属性绑定JavaBean的getUsername方法和setUsername
* @author ranger
*
*/
public class User { private String password;
private String username;
private int age;
private String sex; public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
System.out.println("--"+username);
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package cn.mgy.entity;
import java.util.List;
public class UsersModel {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
后台代码:
/**
* 集合类型,需要转成JavaBean类型
* @param userModel
* @return
*/
@RequestMapping(value="listuser2",method=RequestMethod.POST)
public String listuser2(UsersModel userModel){ for(User user:userModel.getUsers()){
System.out.println("用户名:"+user.getUsername()+"密码:"+user.getPassword());
} return "/hello.jsp";
}
5、数据的强制绑定
SpringMVC 有一些数据是不能自动绑定,需要我们使用它提供的注解强制绑定。
遇到需要强制绑定的几种情况:
(1)默认参数自动绑定的是表单数据,如果数据不是来自表单,那么需要强制绑定
(2)数据是来自表单的,但是参数名不匹配,那么也需要强制绑定
(3)数据是来自表单的,但是需要将数据绑定在 Map 对象里面,需要强制绑定
5.1、 @PathVariable:绑定路径参数
后台代码:
/**
* 获得路径的变量
* ${pageContext.request.contextPath }/zhangsan/say2.mvc
* 如何让执行方法获得请求路径的zhangsan
* @param name
* @return
*/
@RequestMapping(value="{name}/say2")
public ModelAndView say2(@PathVariable String name){
System.out.println("-你好世界!-"+name);
ModelAndView mv=new ModelAndView();
//设置返回的视图
mv.setViewName("/hello.jsp");
mv.addObject("msg", "张三");
return mv;
}
5.2、@CookieValue 获得 Cookie 值的注解
后台代码:
package cn.mgy.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class CookieController { /**
* 获得JSP 页面,JSESSIOINID这个Cookie值
* @param cookevalue
*/
@RequestMapping(value="getcookie")
public void getcookie(@CookieValue(value="JSESSIONID") String cookevalue){
//输出Cookie
System.out.println(cookevalue);
} }
5.3、通过 @RequestParam 绑定表单数据
(1)接收的参数的变量名与表单的 name 属性不一样
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(HttpSession session,String password,@RequestParam(value="username") String uname){ System.out.println("-登录-user"+uname);
System.out.println("用户名:"+uname);
System.out.println("密码:"+password);
session.setAttribute("username", uname);
session.setAttribute("password", password);
return "/hello.jsp";
}
(2)将表单数据绑定到 Map 里面
默认情况下,表单是不能自动绑定数据到 Map 里面的,如果要绑定数据到 Map,需要加上 @RequestParam 强制绑定
@RequestMapping(value="register1",method=RequestMethod.POST)
public String register1(@RequestParam Map<String,Object> entity){ System.out.println("-注册-user");
System.out.println("用户名:"+entity.get("username"));
System.out.println("密码:"+entity.get("password"));
System.out.println("年龄"+entity.get("age"));
System.out.println("性别:"+entity.get("sex")); return "/hello.jsp";
}
6、JSON 的支持
所谓的对 JSON 的支持,就是 SpringMVC 支持自动将 JSON 对象转换成 JAVA 对象,也支持将 JAVA 对象自动转成 JSON 对象。
配置步骤:
(1)导入包
SpringMVC 本身没有对 JSON 数据处理的类库,要支持 JSON 的自动转换必须导入 JSON 的支持包

(2)必须在配置文件增加这个标签,即启动注解的默认配置
<mvc:annotation-driven></mvc:annotation-driven>
需求:请求发送一个 JSON 的对象给执行方法,执行方法根据 @RequestBody 这个注解强制将请求发送过来的 JSON 转换成 Java 对象
前台代码:
<!-- 使用jQuery构建一个JSON对象 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.2.0.min.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
type:"POST",
url: "${pageContext.request.contextPath}/user/get-user.mvc",
//构建一个发送JSON的请求
contentType:"application/json",
data:"{\"username\":\"张三\",\"password\":\"123456\"}",
success: function(data){ }
});
});
</script>
后台代码:
package cn.gzsxt.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import cn.gzsxt.entity.User; @Controller
@RequestMapping(value="user")
public class UserController { /**
* 创建一个执行方法
* 请求的JSON数据必须要使用@RequestBody,强制绑定
*/
@RequestMapping(value="get-user",method=RequestMethod.POST)
public void getUser(@RequestBody User user){
System.out.println("用户名:"+user.getUsername());
System.out.println("密码:"+user.getPassword());
System.out.println("-获得用户数据-");
}
}
数据返回到页面,自动将 Java 对象转成 JSON
前台代码:
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.2.0.min.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
type:"POST",
url: "${pageContext.request.contextPath}/user/get-user.mvc",
//构建一个发送JSON的请求
contentType:"application/json",
data:"{\"username\":\"张三\",\"password\":\"123456\"}",
// 成功返回的 JSON 对象
success: function(data){
console.log(data);
window.alert(data.username);
}
});
});
</script>
后台代码:
package cn.mgy.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import cn.mgy.pojo.User; @Controller
@RequestMapping(value="user")
public class UserController { /**
* 创建一个执行方法
* 请求的JSON数据必须要使用@RequestBody,强制绑定
*返回一个实体类对象,使用 @ResponseBody转成JSON对象
*/
@RequestMapping(value="get-user",method=RequestMethod.POST)
@ResponseBody
public Object getUser(@RequestBody User user){
System.out.println("用户名:"+user.getUsername());
System.out.println("密码:"+user.getPassword());
System.out.println("-获得用户数据-");
//返回对象, 默认返回的是路径,如果返回的是数据,必须增加一个注解@ResponseBody
return user;
}
}
将 Map 对象转成 JSON 对象
前台代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<!-- 使用jQuery构建一个JSON对象 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.2.0.min.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
type:"POST",
url: "${pageContext.request.contextPath}/user/get-user-map.mvc",
success: function(data){
console.log(data);
window.alert(data.username);
}
});
});
</script> <body>
用户登录
</body>
</html>
后台代码:
/**
* SpringMVC也支持将Map转成JOSN对象
*返回一个Map对象,使用 @ResponseBody转成JSON对象
* @return
*/
@RequestMapping(value="get-user-map",method=RequestMethod.POST)
@ResponseBody
public Object getUserMap(){
Map<String,Object> datamap=new HashMap<>();
System.out.println("-获得用户数据-");
//返回对象, 默认返回的是路径,如果返回的是数据,必须增加一个注解@ResponseBody
datamap.put("username", "李四");
datamap.put("password", "123");
datamap.put("age", 12);
return datamap;
}
SpringMVC 的数据绑定的更多相关文章
- SpringMVC之数据绑定
SpringMVC之数据绑定 #数据绑定:Spring MVC会根据客户端请求参数的不同,将请求信息以一定的方式转换并绑定 到控制器类中的方法参数上. #说明:这里的“以一定的方式”应该指的是什么?过 ...
- SpringMvc的数据绑定流程
在SpringMvc中会将来自web页面的请求和响应数据与controller中对应的处理方法的入参进行绑定,即数据绑定.流程如下: -1.SpringMvc主框架将ServletRequest对象及 ...
- SpringMVC之 数据绑定-1
SpringMVC学习系列(4) 之 数据绑定-1 在系列(3)中我们介绍了请求是如何映射到一个action上的,下一步当然是如何获取到请求中的数据,这就引出了本篇所要讲的内容—数据绑定. 首先看一下 ...
- SpringMVC框架——数据绑定
Spring MVC 数据绑定 使用POJO绑定参数 entity package com.sunjian.entity; /** * @author sunjian * @date 2020/3/1 ...
- SpringMVC之数据绑定(转)
到目前为止,请求已经能交给我们的处理器进行处理了,接下来的事情是要进行收集数据啦,接下来我们看看我们能从请求中收集到哪些数据, 1.@RequestParam绑定单个请求参数值: 2.@PathVar ...
- springMVC学习总结(三)数据绑定
springMVC学习总结(三)数据绑定 一.springMVC的数据绑定,常用绑定类型有: 1.servlet三大域对象: HttpServletRequest HttpServletRespons ...
- springMVC能做什么,做j2ee时候要考虑什么
转载: http://jinnianshilongnian.iteye.com/category/231099 [置顶] 跟我学SpringMVC目录汇总贴.PDF下载.源码下载 博客分类: 跟开涛学 ...
- 扩展SpringMVC以支持绑定JSON格式的请求参数
此方案是把请求参数(JSON字符串)绑定到java对象,,@RequestBody是绑定内容体到java对象的. 问题描述: <span style="font-size: x-sma ...
- 【SSH系列】深入浅出SpringMvc+入门Demo
Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC和Struts.Strut ...
随机推荐
- Linux环境下使用dosemu写汇编
本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式“逆向”在这有很好很直接的体现,反汇编就是直接的逆向工程. 所以我在前几天的学习中在Ubuntu环境下安装了可 ...
- EASYARM-IMX283 烧写uboot和linux系统
新入手一台EASYARM-IMX283开发板(以下简称IMX823),价格比较便宜,配置也不错. 开发板默认安装了WINCE,我还是决定重新烧写uboot和linux内核. 开发板配套光盘里面有不少烧 ...
- rbx1包里机器人仿真程序的实践
git clone https://github.com/pirobot/rbx1.git 1.打开一个终端 cd ~/catkin_ws/ catkin_make source ./devel/s ...
- ubuntu上swift开发学习2
使用包管理器(package manager)创建一个可执行的项目 1. 创建一个Hello目录,然后进入目录 $ mkdir Hello $ cd Hello 2. 使用包初始化命令,参数表示创建一 ...
- BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 乱发节:单调栈
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1660 题意: 有n头牛,身高分别为h[i]. 它们排成一排,面向右边.第i头牛可以看见在它 ...
- POJ 3620 Avoid The Lakes(dfs算法)
题意:给出一个农田的图,n行m列,再给出k个被淹没的坐标( i , j ).求出其中相连的被淹没的农田的最大范围. 思路:dfs算法 代码: #include<iostream> #inc ...
- 远程调用appium server
例如:我有两台电脑A(192.168.112.10)和B(192.168.112.11),那我怎么能在A执行本地脚本,但是使用B上的server呢? 查看appium连接appium服务并开启一个 ...
- L3-007 天梯地图(30 分)
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...
- mongdb启动问题
问题:Detected unclean shutdown - /data/db/mongod.lock is not empty. old lock file:/data/db/mongod.lock ...
- P2743(poj1743) Musical Themes[差分+后缀数组]
P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...