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

 2019-10-17 21:29  阅读(1576)
文章分类:Spring boot

你在写接口的时候难免会遇到接收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)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> spring boot 随笔 -- 配置全局的String转Date参数转换器

相关推荐