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的编码格式进行解析。

相关推荐
sjsjsbbsbsn4 分钟前
Spring Boot定时任务原理
java·spring boot·后端
yqcoder5 分钟前
Express + MongoDB 实现在筛选时间段中用户名的模糊查询
java·前端·javascript
菜鸟蹦迪33 分钟前
八股文实战之JUC:ArrayList不安全性
java
2501_9032386533 分钟前
Spring MVC配置与自定义的深度解析
java·spring·mvc·个人开发
逻各斯44 分钟前
redis中的Lua脚本,redis的事务机制
java·redis·lua
计算机毕设指导61 小时前
基于Springboot学生宿舍水电信息管理系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
计算机-秋大田1 小时前
基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·spring·课程设计
计算机小白一个1 小时前
蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)
java·数据结构·蓝桥杯
二十雨辰2 小时前
[Java基础]网络编程
java·开发语言
ACGkaka_2 小时前
抓包工具(三)Wireshark代理抓包Java程序的HTTPS请求
java·https·wireshark