Spring MVC,绑定POJO类型(包括日期字段)

一、假定基本环境已经具备

参考:Spring MVC,绑定默认数据

二、创建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后台正常打印信息:

posted @ 2021-09-30 14:47  那些年的事儿  阅读(286)  评论(0编辑  收藏  举报