• 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后台正常打印信息:

  • 相关阅读:
    [LeetCode] 17. 电话号码的字母组合 ☆☆☆(回溯) ###
    [LeetCode] 22. 括号生成 ☆☆☆(回溯)
    [LeetCode] 15. 3Sum ☆☆☆(3数和为0)
    Trie 树(字典树)
    dubbo框架梳理
    Linux内存管理与C存储空间
    C语言实现的minixml解析库入门教程
    函数不定参数个数的实现
    C语言变量名转字符串的方法
    C语言编译和链接
  • 原文地址:https://www.cnblogs.com/nayitian/p/15356736.html
Copyright © 2020-2023  润新知