当前位置:   article > 正文

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

springboot 解决传字符串参数自动转时间类型

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

  1. @Configuration
  2. public class WebConfigBeans {
  3. @Autowired
  4. RequestMappingHandlerAdapter requestMappingHandlerAdapter;
  5. @PostConstruct
  6. public void initEditableValidation(){
  7. ConfigurableWebBindingInitializer configurableWebBindingInitializer = (ConfigurableWebBindingInitializer) requestMappingHandlerAdapter.getWebBindingInitializer();
  8. if(configurableWebBindingInitializer.getConversionService()!=null){
  9. GenericConversionService service = (GenericConversionService) configurableWebBindingInitializer.getConversionService();
  10. service.addConverter(new StringToDateConverter());
  11. }
  12. }
  13. }

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

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

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

  1. @Configuration
  2. public class SpringMVCConfig extends WebMvcConfigurationSupport{
  3. /**
  4. * 添加自定义的Converters和Formatters.
  5. */
  6. @Override
  7. protected void addFormatters(FormatterRegistry registry) {
  8. registry.addConverter(new StringToDateConverter());
  9. }
  10. }

绿色环保更节能!

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

  1. public class StringToDateConverter implements Converter<String, Date> {
  2. private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
  3. private static final String shortDateFormat = "yyyy-MM-dd";
  4. @Override
  5. public Date convert(String source) {
  6. if (StringUtils.isBlank(source)) {
  7. return null;
  8. }
  9. source = source.trim();
  10. try {
  11. if (source.contains("-")) {
  12. SimpleDateFormat formatter;
  13. if (source.contains(":")) {
  14. formatter = new SimpleDateFormat(dateFormat);
  15. } else {
  16. formatter = new SimpleDateFormat(shortDateFormat);
  17. }
  18. return formatter.parse(source);
  19. } else if (source.matches("^\\d+$")) {
  20. Long lDate = new Long(source);
  21. return new Date(lDate);
  22. }
  23. } catch (Exception e) {
  24. throw new RuntimeException(String.format("parser %s to Date fail", source));
  25. }
  26. throw new RuntimeException(String.format("parser %s to Date fail", source));
  27. }
  28. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/229703
推荐阅读
相关标签
  

闽ICP备14008679号