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

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

你在写接口的时候难免会遇到接收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));
            }
    }

来源:[]()

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » spring boot 随笔 — 配置全局的String转Date参数转换器

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏