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. 《C prime plus (第五版)》 ---第11章 字符串和字符串函数---2

    11-3:字符串 输出 三个标准的函数:puts() fputs() printf() 1.puts()函数: #include<stdio.h> #define DEF "I ...

  2. hadoop —— MapReduce例子 (求平均值)

    参考:http://eric-gcm.iteye.com/blog/1807468 math.txt: 张三 88 李四 99 王五 66 赵六 77 china.txt: 张三 78 李四 89 王 ...

  3. hibernate 一对多 级联 保存修改 删除

    一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...

  4. utf8_general_ci和utf8_unicode_ci的比较

    看到很多数据库的设计对于中文字符都是选择选用utf8_general_ci而非utf8_unicode_ci utf8_general_ci和utf8_unicode_ci的区别并不大:utf8_un ...

  5. animate旋转动画练习,css3形变练习

    <!DOCTYPE html> <!-- saved from url=(0048)http://yinjiazeng.github.io/test/dial/index.html ...

  6. stack_1.设计一个有getMin功能的栈

    思路 : 生成两个栈($stack ,$stack_min ),往$stack塞数据($value)的时候 ,比较一下$value和$stack_min最上面的元素的大小,如果$value小,则压入$ ...

  7. 【MFC】动态创建CMFCToolbar图标不显示问题

    最近遇到一个问题,需要动态的从xml文件读取一系列图标文件,加载到一个toolbar中,由于使用的是vs2008 with sp1 feature pack,自然想到用CMFCToolbar来做,思路 ...

  8. Maven-将jar包安装到本地仓库

    因为项目需要,使用的是sqlserver数据库,但是却找不到其对应的pom依赖,所以需要将本地jar包安装到本地仓库,定义pom依赖.以此为例,其他jar包均可参考该方式 cmd命令语句: mvn i ...

  9. gulp记录

    npm install gulp -g //全局安装gulp gulp -v //此处若有问题,配置环境变量,npm config get prefix得到路径 npm init //新建nodejs ...

  10. CodeForcesdiv1:995C - Leaving the Bar(随机算法+贪心)

    For a vector →v=(x,y)v→=(x,y), define |v|=√x2+y2|v|=x2+y2. Allen had a bit too much to drink at the ...