Spring MVC,绑定POJO类型(包括日期字段)
一、假定基本环境已经具备
二、创建POJO类
package com.itheima.po; import lombok.Data; import java.util.Date; @Data public class Customer { private Integer id; // 主键id private String username; // 客户名称 private String jobs; // 职业 private String phone; // 电话 private Date birthday; // 生日 }
本类引用lombok包,请自行下载安装,具体可参考:lombok的@Data/@ToString注解不生效:MyEclipse2020环境下,如何正确安装lombok
三、创建前台表单页面form2.jsp,位于:mvc目录
<%@ 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>提交POJO类型</title> </head> <body> <form action="../hello/pojoParameter" method="post"> 用户id:<input type="text" name="id" value="2"></br> 用户名:<input type="text" name="username" value="Andy"></br> 职业:<input type="text" name="jobs" value="工程师"></br> 电话:<input type="text" name="phone" value="010-99999999"></br> 出生日期:<input type="text" name="birthday" value="2000-01-01"></br> <input type="submit" value="提交"> </form> </body> </html>
四、创建后台控制器类
package com.itheima.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.itheima.po.Customer; @Controller @RequestMapping(value = "/hello") public class POJOController { @RequestMapping("/pojoParameter") public String pojoParameter(Customer customer){ System.out.println(customer); return "success"; } }
五、测试,打开网页:http://localhost:8080/ssm/mvc/form2.jsp
提交,后台没有任何错误,但前台会报错:
HTTP状态 400 - 错误的请求 类型 状态报告 描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。
原因:Spring MVC默认不支持String到Date的转换,所以把2000-01-01转换到Customer在的birthday属性时,会报错。
六、解决日期转换的问题
6.1 创建DateConverter类
package com.itheima.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; //需要实现Converter接口,这里是将String类型转换成Date类型 public class DateConverter implements Converter<String, Date> { @Override public Date convert(String source) { //实现将字符串转成日期类型(格式是yyyy-MM-dd) SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { return dateFormat.parse(source); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } //如果参数绑定失败返回null return null; } }
6.2 修改springmvc-config.xml
包括两个部分,一个是命名空间
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
另一个是引用
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <!-- 自定义转换器的类名 --> <bean class="com.itheima.utils.DateConverter"></bean> </property> </bean>
七、重新测试,打开网页:http://localhost:8080/ssm/mvc/form2.jsp
提交,Tomcat后台正常打印信息: