SpringMVC date转换问题

本文介绍了解决SpringMVC框架中Date类型字段从String类型数据转换的问题,提供了两种解决方案:一是通过自定义转换器实现类型转换;二是利用@DateTimeFormat注解简化配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考
有时候我们会碰到这么一个问题,有一个实体类,里面有一个Date类型的数据,jsp页面传递的时间参数是String的,这就导致无法对应,springmvc无法帮我们自动封装参数到实体类中了,这里我解决的方法有两种:

1.是自定义一个转换器,实现Converter<S,T>接口,S:代表要进行转换的参数的类型,T:代表转换后的类型

2.利用@DateTimeFormat注解

1 简单测试代码如下:DateConverter类中conver()方法将字符串转化为自定义的时间类型,当前台页面发送请求中有参数为string类型,而在后台接收时用Date类型直接接收,因为转换器会帮我们转化

package com.wuyx.Utils;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverte implements Converter<String , Date> {
    //定义日期转换规则数组
    String[] pattern;
    @Override
    public Date convert(String source) {
        if (null==source || "".equals(source.trim())){
            return null;
        }
//        根据前台日期数据长度,初步筛选匹配规则
        if (source.length()>10){
            pattern=new String[]{"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss"};
        }else {
            pattern=new String[]{"yyyy-MM-dd","yyyy/MM/dd"};
        }
//        循环匹配日期格式,如本次不匹配则进入下一次条件匹配
        for (String p:pattern){
            try {
                return new SimpleDateFormat(p).parse(source);
            } catch (ParseException e) {
                continue;
            }
        }

        return null;
    }
}

该转换器如果要实现,还需要将器注册到mvc注解驱动中,让注解驱动的conversion-service使用我们自定义的

<!-- 第三步:注册处理器映射器/处理器适配器 ,添加conversion-service属性-->
    <mvc:annotation-driven conversion-service="conversionService"/>

    <!-- 第二步: 创建convertion-Service ,并注入dateConvert-->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="dateConvert"/>
            </set>
        </property>
    </bean>
    <!-- 第一步:  创建自定义日期转换规则 -->
    <bean id="dateConvert" class="com.wuyx.Utils.DateConverte"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值