spring boot 随笔 -- 配置全局的String转Date参数转换器

本文介绍了一种在SpringBoot项目中将String类型日期参数转换为Date类型的有效方法。通过扩展WebMvcConfigurationSupport并覆盖addFormatters方法,可以轻松地添加自定义的String到Date转换器。

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

你在写接口的时候难免会遇到接收String类型的日期参数(例如:2018-04-21 11:57:36)转换成Date类型情况。
百度了一番,发现大多数答案都是这样子的:

@Configuration
public class WebConfigBeans {

    @Autowired
    RequestMappingHandlerAdapter requestMappingHandlerAdapter;

    @PostConstruct
    public void initEditableValidation(){
       ConfigurableWebBindingInitializer configurableWebBindingInitializer = (ConfigurableWebBindingInitializer) requestMappingHandlerAdapter.getWebBindingInitializer();
        if(configurableWebBindingInitializer.getConversionService()!=null){
            GenericConversionService service = (GenericConversionService) configurableWebBindingInitializer.getConversionService();
            service.addConverter(new StringToDateConverter());
        }
    }
}

上面的代码确实解决了问题,可是,代码有点不绿色节能。

以下是我的实现:
配置配置全局的String转Date参数转换器,可以简单解决这个问题!

web配置如下(spring boot 1.x 2.x 通用):

@Configuration
public class SpringMVCConfig extends WebMvcConfigurationSupport{

    /**
     * 添加自定义的Converters和Formatters.
     */
    @Override
    protected void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToDateConverter());
    }
}

绿色环保更节能!

String转Date转换器实现如下(好吧,我承认下面的代码这是我抄来的):

public class StringToDateConverter implements Converter<String, Date> {

    
     private static final String dateFormat      = "yyyy-MM-dd HH:mm:ss";
     private static final String shortDateFormat = "yyyy-MM-dd";

        @Override
        public Date convert(String source) {
            if (StringUtils.isBlank(source)) {
                return null;
            }
            source = source.trim();
            try {
                if (source.contains("-")) {
                    SimpleDateFormat formatter;
                    if (source.contains(":")) {
                        formatter = new SimpleDateFormat(dateFormat);
                    } else {
                        formatter = new SimpleDateFormat(shortDateFormat);
                    }
                    return formatter.parse(source);
                } else if (source.matches("^\\d+$")) {
                    Long lDate = new Long(source);
                    return new Date(lDate);
                }
            } catch (Exception e) {
                throw new RuntimeException(String.format("parser %s to Date fail", source));
            }
            throw new RuntimeException(String.format("parser %s to Date fail", source));
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值