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 ...
随机推荐
- ASCII 在线转换器
http://www.ab126.com/goju/1711.html 比如下发内容 <S020,*> 对应的16进制字节为 3C 2C 2A 3E https://wenku.baidu ...
- BZOJ 4519 [CQOI2016]不同的最小割
这道题目很奇怪. 为什么奇怪?因为这道题用了一种叫分治最小割/最小割树的玩意. 以前从来没有见过这东西. 推荐一个讲这玩意的博客 写起来还是很顺手的. #include<iostream> ...
- matlab之结构体数组struct
以下内容来自于:https://blog.csdn.net/u010999396/article/details/54413615/ 要在MALTAB中实现比较复杂的编程,就不能不用struct类型. ...
- 动态创建TeeChart的简便方法
最近在项目中使用Teechart ocx版本替换了labview的老版本控件,显示效果和效率均有提高,但是却遇到多线程下报access violation的问题. 翻遍大小论坛,最后在官网论坛找到相同 ...
- Django:locals()小技巧
locals()返回一个包含当前作用域里面的所有变量和它们的值的字典. 所以可以把views改写为 def current_datetime(request): current_date = ...
- 牛客网暑期ACM多校训练营(第三场)G:Coloring Tree(函数的思想)
之前两次遇到过函数的思想的题,所以这次很敏感就看出来了.可以参考之前的题: https://www.cnblogs.com/hua-dong/p/9291507.html Christmas is c ...
- MySQL常用的数据类型及函数_20160920
1.常用数据类型 针对创建数据表时候 需要指定字段的数据类型,我整理的是工作常用的几种 可以参考看下数据类型 http://www.w3school.com.cn/sql/sql_datatypes. ...
- codevs 1144 守望者的逃离
传送门 1144 守望者的逃离 2007年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 恶 ...
- 创建自己的YUM仓库
1. 首先,假定我们应用的名字叫helloworld(可以参考简单 RPM 包制作来创建两个版本helloworld安装RPM包,helloworld-1.0.0-1.el6.x86_64.rpm和h ...
- C# 架构模式
单例模式 (Singleton) 单例讲的是当一个类被初次调用时,会产生一个类的实例, 而这个类的实例会贯穿程序的整个生命周期.单例提供了一个全局.唯一的实例. 步骤:1.让类自己创建一个实例:2.提 ...