zoukankan      html  css  js  c++  java
  • 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后台正常打印信息:

  • 相关阅读:
    WinFrom 第三方控件 TeleRik控件
    部署项目可以将源码删掉
    XDocument简单入门
    通过HttpWebRequest在后台对WebService进行调用
    C#中HttpWebRequest的用法详解
    HttpWebRequest类
    系统之间通讯方式—SOAP(web service)
    Linux strace命令
    使用 Linux 的 strace 命令跟踪/调试程序的常用选项
    Linux umount的device is busy问题
  • 原文地址:https://www.cnblogs.com/nayitian/p/15356736.html
Copyright © 2011-2022 走看看