SpringMVC 处理Date类型数据@InitBinder @DateTimeFormat 注解 的使用

使用SpringMVC的时候,需要将表单中的日期字符串转换成对应JavaBean的Date类型,而SpringMVC默认不支持这个格式的转换,解决方法有两种,如下:

方法一 . 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作。

/* 以下资料来自网络 */

@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder标记初始化WebDataBinder的方法,WebDataBinder被用于填充被注解的处理方法的命令和表单对象参数。

??   这些初始化绑定器(Init-binder)方法支持@RequestMapping方法支持的所有参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,所以它们通常被声明为 void 的。典型的参数包括WebDataBinderWebRequest或 者java.util.Locale,允许用代码方式注册特定上下文的编辑器(context-specific editors)。

/* 以上资料来自网络 */
       WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set的数据是日期类型, Spring就会去找到对应的editor进行转换,将String类型转换成日期类型,然后再set进去.

我们要进行类型转换,需要在springMvc里配置配型转换器,springMvc提供了很多类型转化器,配置方法如下:

    <!-- 日期转换 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>                <!--配置String类型的消息转换器-->
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=utf-8</value>
                        </list>
                    </property>
                </bean>                <!--此处还可以定义其他类型的消息转换器 -->
            </list>
        </property>
    </bean>

然后在需要进行类型转换的controller里创建初始化绑定器方法,用对应的编辑器将接受到的字符串转为日期,代码如下:

@Controller
public class MyFormController
{
    @InitBinder
    protected void initBinder(WebDataBinder binder)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }
}

spring mvc在绑定数据之前,都会先注册这些编辑器,Spring提供了很多编辑器的实现类,像CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等,使用时候调用WebDataBinder的registerCustomEditor方法.

需要注意的是,此初始化绑定的方法,只在该Controller内生效.

这样,我们前台传递的字符串日期信息,在后台javaBean中使用Date就可以直接接收到了.

方法二: 使用@DateTimeFormat 注解方式,建议使用,此方式简单,且代码量少

首先,@DateTimeFormat 注解使用到了joda包中的东西, 我们需要引入joda相关jar包.如果不引入会报异常

 <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.9.7</version>
</dependency>

然后,我们要在javaBean 中要接收的Date类型数据上加上注解: 如下:

public class Person{

    private String name;

    private Integer age;

    private Integer sex; 

    //在date类型上加入注解,同时指定接收到的日期格式样式
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birthday;
}

最后,在SpringMVC配置XML文件中进行注解驱动的配置:

    <!-- 日期转换 -->
    <mvc:annotation-driven conversion-service="conversionService" />
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=utf-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

这样就完成了,后续只要的新增的javaBean中给日期类型加上@DateTimeFormat注解即可,任意contorller中使用javaBean接受数据时,传递的String类型数据会自动转换成对应日期类型

需要注意的是 接收字符串的日期格式需要与@DateTimeFormat注解后定义的格式一致.

原文地址:https://www.cnblogs.com/huaixiaonian/p/8649683.html

时间: 2024-10-10 04:37:27

SpringMVC 处理Date类型数据@InitBinder @DateTimeFormat 注解 的使用的相关文章

【Spring】SpringMVC中浅析Date类型数据的传递

在控制器中加入如下代码: @InitBinder public void initBinder(ServletRequestDataBinder bin){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置自己的date格式 CustomDateEditor cust = new CustomDateEditor(dsf,true); bin.registerCustomEditor(Date

SpringMvc如何传递获取Date类型数据

在控制器中加入如下代码: @InitBinderpublic void initBinder(ServletRequestDataBinder bin){         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         CustomDateEditor cust = new CustomDateEditor(dsf,true);         bin.registerCustomE

Jdbc插入date类型数据到oracle中

导入数据库jar包,路径如下: E:\oracle\product\10.1.0\Db_3\jdbc\lib\ojdbc14.jar 建表语句如下: create table t_user( id int primary key, username varchar(40), password varchar(16), phone varchar(40), address varchar(255), createdate date ) Jdbc代码如下: public void save(){ C

SpringMVC关于Date类型的时间根据格式显示页面上

最近和别人开发WEB项目,用的是springMVC,在开发过程中遇到了许多小问题,为了避免以后碰到类似的问题还是不会弄,就写了一篇博客. 今天遇到了如何把数据库中date类型的数据根据要求转换格式“yyyy-MM-dd”.网上看了些方法,我使用的是在实体类中进行注解. 这个是spring-context.jar中的 并且在相应的JSP中添加:<spring:eval expression="c.time"></spring:eval><br/> 注意

SpringMVC处理Date类型的成员变量方法

原文链接:http://www.tuicool.com/articles/aYfaqa 在使用 SpringMVC 的时候,我们可能需要将一个对象从 View 传递给 Controller .而当这个 Object 只是一些简单的 String , int 或者 boolean 类型的成员变量时,SpringMVC 能自动将 View 层的 JSON 包含的 String 类型转换为 Object 成员变量相应的类型.但是当这个 Object 包 Date 类型的成员变量的时候, SpringM

JAVA DATE类型数据比较判断大小方法

两个Date类型的变量可以通过compareTo方法来比较.此方法的描述是这样的:如果参数 Date 等于此 Date,则返回值 0:如果此 Date 在 Date 参数之前,则返回小于 0 的值:如果此 Date 在 Date 参数之后,则返回大于 0 的值. 实际上比较的是自1970 年 1 月 1 日 00:00:00 GMT以来的毫秒数.毫秒数越大的时间越大. String DateStr1 = "2014-08-21 10:20:16"; String DateStr2 =

springMVC接受json类型数据

springMVC接受json格式的数据很简单 使用@RequestBody 注解,标识从请求的body中取值 服务端示例代码 @RequestMapping(value = "/t4", method = RequestMethod.POST) @ResponseBody public Result t3(@RequestBody SysUser user) { Result r = Result.success(); r.setData(user); return r; } 客户端

Oracle关于date类型数据的总结

往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ; 查询显示:2007-12-20 18:31:34.0 ------------------- INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-14 14:10' , 'YYYY-MM-DD HH2

oracle 数据库中 date类型数据查询操作,格式转换,字符转date

//查询日期(类型为date)的数据 select * from auth_organization_t t where to_char(create_date,'yyyy-mm-dd hh:mi:ss') = '2013-08-12 05:31:09' select to_char(create_date,'yyyy-mm-dd hh:mi:ss') from auth_organization_t t