700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Spring MVC数据绑定 ----从入门到精通篇(三) POJO数据类型的绑定和自定义数据绑定

Spring MVC数据绑定 ----从入门到精通篇(三) POJO数据类型的绑定和自定义数据绑定

时间:2021-08-13 11:10:44

相关推荐

Spring MVC数据绑定 ----从入门到精通篇(三) POJO数据类型的绑定和自定义数据绑定

文章目录

1.简单的POJO类型数据的绑定的使用2.绑定包装POJO数据类型3.自定义数据绑定-日期数据的转换

前言

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

那么我们将采取何种方式处理呢?如果是某种特殊类型的请求,我们又该如何?

1.简单的POJO类型数据的绑定的使用

针对多类型、多参数的请求,可以使用POJO类型进行数据绑定。

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

POIO ( Plain Ordinary Java Object意思是简单的Java对象,实际就是普通JavaBeans.

接下来通过一个用户注册案例,来演示POJO类型数据的绑定的使用。

1、在com.zsj.po包中创建用户类POJO,来封装用户注册信息

package com.zsj.po;public class User {private Integer id;private String username;private Integer password;public Integer getId(){return id;}public void setId(Integer id){this.id=id;}public String getUsername(){return username;}public void setUsername(String username){this.username=username;}public Integer getPassword(){return password;}public void setPassword(Integer password){this.password=password;}}

2、在控制器Controller中编写接收用户注册信息的方法和向注册页面跳转的方法

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

3、在WEB-INF/jsp目录下编写用户注册页面register.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>注册</title></head><body><form action="${pageContext.request.contextPath}/registerUser" method="post">用户名:<input type="text" name="username" /><br>密&nbsp;&nbsp;码:<input type="text" name="password" /><br /><input type="submit" value="注册"/></form></body></html>

注意:${pageContext.request.contextPath}是 el表达式取得绝对路径的方法,等价于<%=requestgetContextPath()%>,也就是取出部署的应用程序名或者是当前的项目名称。比如项目名称是SpringMVCDataBind,在浏览器中输入为http:/localhost:8080/SpringMVCDataBind/indx.jsp,那么${pageContext.request.contextPath}或<%=requestgetContextPath/)%> 取出来的就是/SpringMVCDataBind , 而"/"代表的含义就是http://localhost:8080

4、发布Web项目、运行项目

访问http://localhost:8080/SpringMVCDataBind/toRegister返回注册页面:

到这里就完成了吗?各位猜猜看!!输出的结果是否如愿呢?

在前端请求中,难免会有中文信息传递,此时后台方法绑定接收的中文信息却就会出现了中文乱码,如下图所示:

如何解决请求参数中的乱码问题呢?

为了防止前端传入的中文数据出现乱码问题,我们可以在web.xmI中配置Spring提供的编码过滤器来统一编码

修改的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><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></web-app>

输出结果如下:

2.绑定包装POJO数据类型

也许有小伙伴会有些疑问?上面的博客不是才将POJO吗?这两者都有什么区别呢?

其实包装POJO相当于给这些多类型,多参数的请求分类。

例如:在用户查询订单时,页面传递的参数可能包括:订单编号、用户名称等信息,这就包含了订单和用户两个对象的信息,此时后台方法如何绑定请求信息呢?采用POJO吗?方法可用,但订单和用户信息混合封装,显得比较混乱,

除此之外,还可以考虑使用包装POJO类型绑定所谓的包装POJO,就是在一个POJO中包含另一个简单POJO。例如,在订单对象中包含用户对象。这样在使用时,就可以通过订单查询到用户信息。

1、在com.zsj .po包中创建订单类Orders,用于封装订单和用户信息

package com.zsj.po;/*** 订单POJO*/public class Orders {private Integer ordersId; // 订单编号private User user;// 用户POJO,所属用户public Integer getOrdersId() {return ordersId;}public void setOrdersId(Integer ordersId) {this.ordersId = ordersId;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

2、在com.zsj controller包中创建一个订单控制器类OrdersController

package com.zsj.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.zsj.po.Orders;import com.zsj.po.User;@Controllerpublic class OrdersController {/*** 向订单查询页面跳转*/@RequestMapping("/tofindOrdersWithUser")public String tofindOrdersWithUser( ) {return "orders";}/*** 查询订单和用户信息*/@RequestMapping("/findOrdersWithUser")public String findOrdersWithUser(Orders orders) {Integer orderId = orders.getOrdersId();User user = orders.getUser();String username = user.getUsername();System.out.println("orderId="+orderId);System.out.println("username="+username);return "success";}}

3、在WEB-INF/jsp目录下编写订单查询页面orders jisp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>订单查询</title></head><body><form action="${pageContext.request.contextPath }/findOrdersWithUser"method="post">订单编号:<input type="text" name="ordersId" /><br /> 所属用户:<input type="text" name="user.username" /><br /> <input type="submit" value="查询" /></form></body></html>

4、发布Web项目、运行项目

访问http:/localhost:8080/SpringMVCDataBind/tofindOrdersWithUser进入订单查询页面:

输出结果:

3.自定义数据绑定-日期数据的转换

为什么我还要在讲解一种数据绑定形式呢?

一般情况下,使用基本数据类型和POJO类型的参数数据已经能够满足需求,然而有些特殊类型的参数是无法在后台进行直接转换的,但也有特殊数据类型无法直接进行数据绑定,必须先经过数据转换例如日期数据前台提供的**字符串“-04-19”或“/04/19 "需要转换为后台的java.utti.lDate类型,就需要开发者自定义转换器( Converter )威格式化( Formatter )**来进行数据绑定。

由上所知,converter比Formatter更加全面一些,所以我们这里以Converter为例,

1、在com.zsj.convert包中创建日期转换类DateConverter

package com.zsj.convert;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.core.convert.converter.Converter;/*** 自定义日期转换器*/public class DateConverter implements Converter<String, Date> {// 定义日期格式private String datePattern = "yyyy-MM-dd HH:mm:ss";@Overridepublic Date convert(String source) {// 格式化日期SimpleDateFormat sdf = new SimpleDateFormat(datePattern);try {return sdf.parse(source);} catch (ParseException e) {throw new IllegalArgumentException("无效的日期格式,请使用这种格式:"+datePattern);}}}

2、在Spring配置文件中配置自定义转换器

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:mvc="/schema/mvc"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.3.xsd/schema/mvc/schema/mvc/spring-mvc-4.3.xsd/schema/context /schema/context/spring-context-4.3.xsd"><context:component-scan base-package="com.zsj.controller" /><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 显示的装配自定义类型转换器 --> <mvc:annotation-driven conversion-service="conversionService" /><!-- 自定义类型转换器配置 --><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="com.zsj.convert.DateConverter" /></set></property></bean> </beans>

3、在com.zsj.controller包中创建一个日期控制器类DateController

package com.zsj.controller;import java.util.Date;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/*** 日期控制器类*/@Controllerpublic class DateController {/*** 使用自定义类型数据绑定日期数据*/@RequestMapping("/customDate")public String CustomDate(Date date) {System.out.println("date="+date);return "success";}}

4、发布Web项目、运行项目

访问http://localhost:8080/SpringMVCDataBind/customDate?date=-04-19 17:38:38控制台打印信息如下, 可以看

出,使用自定义类型转换器已从请求中正确获取到了曰期信息,这就是自定义数据绑定

以上就是关于POJO类型和自定义类型的相关叙述。

希望我的博客对你有所帮助!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。