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 的数据绑定的更多相关文章

  1. SpringMVC之数据绑定

    SpringMVC之数据绑定 #数据绑定:Spring MVC会根据客户端请求参数的不同,将请求信息以一定的方式转换并绑定 到控制器类中的方法参数上. #说明:这里的“以一定的方式”应该指的是什么?过 ...

  2. SpringMvc的数据绑定流程

    在SpringMvc中会将来自web页面的请求和响应数据与controller中对应的处理方法的入参进行绑定,即数据绑定.流程如下: -1.SpringMvc主框架将ServletRequest对象及 ...

  3. SpringMVC之 数据绑定-1

    SpringMVC学习系列(4) 之 数据绑定-1 在系列(3)中我们介绍了请求是如何映射到一个action上的,下一步当然是如何获取到请求中的数据,这就引出了本篇所要讲的内容—数据绑定. 首先看一下 ...

  4. SpringMVC框架——数据绑定

    Spring MVC 数据绑定 使用POJO绑定参数 entity package com.sunjian.entity; /** * @author sunjian * @date 2020/3/1 ...

  5. SpringMVC之数据绑定(转)

    到目前为止,请求已经能交给我们的处理器进行处理了,接下来的事情是要进行收集数据啦,接下来我们看看我们能从请求中收集到哪些数据, 1.@RequestParam绑定单个请求参数值: 2.@PathVar ...

  6. springMVC学习总结(三)数据绑定

    springMVC学习总结(三)数据绑定 一.springMVC的数据绑定,常用绑定类型有: 1.servlet三大域对象: HttpServletRequest HttpServletRespons ...

  7. springMVC能做什么,做j2ee时候要考虑什么

    转载: http://jinnianshilongnian.iteye.com/category/231099 [置顶] 跟我学SpringMVC目录汇总贴.PDF下载.源码下载 博客分类: 跟开涛学 ...

  8. 扩展SpringMVC以支持绑定JSON格式的请求参数

    此方案是把请求参数(JSON字符串)绑定到java对象,,@RequestBody是绑定内容体到java对象的. 问题描述: <span style="font-size: x-sma ...

  9. 【SSH系列】深入浅出SpringMvc+入门Demo

    Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC和Struts.Strut ...

随机推荐

  1. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵 【模拟】

    链接:https://www.nowcoder.com/acm/contest/90/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  2. leetcode 863. All Nodes Distance K in Binary Tree

    We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...

  3. Matlab图像处理(03)-基本概念

    概念定义 动态范围:灰度跨跃的值域称为动态范围.上限取决于饱和度,下限取决于噪声. 对比度:一幅图像中最高和最低灰度级间的灰度差. 空间分辨率:图像中可辨别的最小细节的度量.常用度量每单位距离线对数和 ...

  4. POJ 之 WERTYU

    WERTYU Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8371   Accepted: 4007 Descriptio ...

  5. HDU4511 小明系列故事——女友的考验 —— AC自动机 + DP

    题目链接:https://vjudge.net/problem/HDU-4511 小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memor ...

  6. cocos2d-x中CCScrollView纵向展示

    最近写CCScrollView遇到很多问题,样式是竖直的类似tableview,在此记录下: CCLayer* layer; 初始化scrollview内容器层 layer = CCLayer::cr ...

  7. windows与Linux操作系统的差别

    用户需要记住:Linux和Windows在设计上就存在哲学性的区别.Windows操作系统 倾向于将更多的功能集成到操作系统内部,并将程序与内核相结合:而Linux不同 于Windows,它的内核空间 ...

  8. Ubuntu下安装deb包命令

    原文地址:http://www.xitongzhijia.net/xtjc/20150206/37464.html 1.下载需要安装的deb包,输入以下命令安装: sudo dpkg -i packa ...

  9. asm 兼容性、asm 主要参数管理

    一 ASM instance 与 Database instance 的版本兼容性说明 1. Oracle 11gR2 的ASM 支持11g和10g的数据库实例.但是在Oracle Clusterwa ...

  10. 关于pyspark

    http://spark.apache.org/ 官网,下载tar包 解压缩到本地: 设置环境变量,把%Spark解压缩路径%/bin放入到PATH变量中:(可以考虑设置一个SPARK_HOME) 在 ...