Spring MVC数据绑定POJO类型

【图书介绍】《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》_spring+springmvc+mybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客

《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书

【图书介绍】案例可借鉴的Spring应用开发书-CSDN博客

Spring MVC简单数据绑定-CSDN博客

在使用简单数据类型绑定时,可以很容易地根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,就需要手动编写多个不同类型的参数,这种操作显然比较烦琐。此时就可以使用POJO类型进行数据绑定。

POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

【示例12-3】下面通过一个用户注册示例来演示POJO类型数据的绑定,具体实现步骤如下:

在src目录下创建一个com.ssm.po包,在该包下创建一个User类来封装用户注册的信息参数,如文件12.5所示。

文件12.5 User.java

01	package com.ssm.po;
02	//用户类User
03	public class User {
04		private Integer id;
05		private String username;
06		private String password;
07		public Integer getId() {
08		    return id;
09		}
10		public void setId(Integer id) {
11		    this.id = id;
12		}
13		public String getUsername() {
14		    return username;
15		}
16		public void setUsername(String username) {
17		    this.username = username;
18		}
19		public String getPassword() {
20		    return password;
21	 	}
22		public void setPassword(String password) {
23		    this.password = password;
24		}
25	}

在控制器 UserController类中,编写向注册页面跳转和接收用户注册信息的方法,代码如下所示:

//向注册页面跳转
@RequestMapping("/toRegister")
public String toRegister() {	
	return "register";
}
//接收用户注册信息
@RequestMapping("/registerUser")
public String registerUser(User user) {
	String username=user.getUsername();
	String password=user.getPassword();
	System.out.println("username="+username);
	System.out.println("password="+password);		
	return "success";
}

在WEB-INF/jsp目录下,创建一个用户注册页面register.jsp,在该界面中编写用户注册表单,表单需要以POST方式提交,并且在提交时会发送一条以registerUser结尾的请求消息,如文件12.6所示。

文件12.6 register.jsp

01	<%@ page language="java" contentType="text/html; charset=UTF-8"
02	    pageEncoding="UTF-8"%>
03	<!DOCTYPE HTML>
04	<html>
05	<head>
06	  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
07	  <title>注册</title>
08	</head>
09	<body>
10		<form action="${pageContext.request.contextPath}/registerUser" method="post">
11	   	用户名:<input type="text" name="username" /> <br />
12		密&nbsp;&nbsp;码:<input type="password" name="password" /> <br />
13		<input type="submit" value="注册" />	
14		</form>
15	 </body>
16	</html>

注意:在使用POJO类型数据绑定时,前端请求的参数名(本例中指form表单内各元素的name属性值)必须与要绑定的POJO类中的属性名一样,这样才会自动将请求数据绑定到POJO对象中,否则后台接收的参数值为null。

发布并启动项目,在浏览器中访问地址http://localhost:8080/chapter12_war_exploded /toRegister,就会跳转到用户注册页面register.jsp,如图12.4所示。

图12.4 注册页面(register.jsp)

在图12.4所示的界面中填写对应的用户名和密码,然后单击"注册"按钮即可完成模拟注册功能。这里假设用户注册的用户名和密码分别为jack和jack_123,当单击"注册"按钮后,浏览器会跳转到结果页面,此时控制台的输出结果如图12.5所示。

图12.5 运行结果

从图12.5可以看出,使用POJO类型同样可以获取前端请求传递过来的数据信息,这就是POJO类型的数据绑定。

注意:在前端请求中,难免会有中文信息传递,例如,在图12.4所示的用户名和密码输入框中输入用户名"张三"和密码"123"时,虽然浏览器可以正确跳转到结果页面,但是在控制台中输出的中文信息会出现乱码。为了防止前端传入的中文数据出现乱码问题,可以使用Spring提供的编码过滤器来统一编码。如果要使用编码过滤器,只需要在web.xml中添加如下代码:

<!--配置编码过滤器-->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

上述代码中,通过<filter-mapping>元素的配置会拦截前端页面中的所有请求,并交由名称为CharacterEncodingFilter的编码过滤器类进行处理。在<filter>元素中,首先配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,然后通过初始化参数设置统一的编码为UTF-8。这样所有的请求信息都会以UTF-8的编码格式进行解析。

相关推荐
顽疲7 分钟前
从零用java实现 小红书 springboot vue uniapp (10)系统消息模块 接收推送消息优化
java·vue.js·spring boot·uni-app
!!!52526 分钟前
Mybatis-底层是如何解决sql注入&增删改查操作--删除操作
java·spring boot·mybatis
程序员buddha1 小时前
华为OD上机考试真题(Java)——最长方连续方波信号
java·开发语言·华为od
程序员buddha1 小时前
华为OD上机考试真题(Java)——排队游戏
java·游戏·华为od
CodeClimb1 小时前
【华为OD-E卷 - 整数编码 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb1 小时前
【华为OD-E卷 - IPv4地址转换成整数 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
arnold661 小时前
华为OD E卷(100分)53-TLV解码
java·算法·华为od
stay hungry,stay you1 小时前
MyBatis递归查询层级关系的树
java
life or die1 小时前
Kafka权威指南(第2版)读书笔记
java·kafka
会写代码的健身爱好者1 小时前
钉钉消息推送()
java·服务器·钉钉