服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 解决springboot 实体类String转Date类型的坑

解决springboot 实体类String转Date类型的坑

2022-02-27 15:27DemonsPan Java教程

这篇文章主要介绍了解决springboot 实体类String转Date类型的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot 实体类String转Date类型

前端传入一个String的时间字符串如:2019-07-18 23:59:59

后端实体类要在头顶加注解:

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

解决springboot 实体类String转Date类型的坑

不然会出现报错

解决springboot 实体类String转Date类型的坑

 

Date解析String类型的参数

1.首先建立String to Date 的解析实现

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;
import java.text.SimpleDateFormat;
import java.util.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 value) {
      if (StringUtils.isEmpty(value)) {
          return null;
      }
      value = value.trim();
      try {
          if (value.contains("-")) {
              SimpleDateFormat formatter;
              if (value.contains(":")) {
                  formatter = new SimpleDateFormat(dateFormat);
              } else {
                  formatter = new SimpleDateFormat(shortDateFormat);
              }
              Date dtDate = formatter.parse(value);
              return dtDate;
          } else if (value.matches("^\\d+$")) {
              Long lDate = new Long(value);
              return new Date(lDate);
          }
      } catch (Exception e) {
          throw new RuntimeException(String.format("parser %s to Date failed", value));
      }
      throw new RuntimeException(String.format("parser %s to Date failed", value));
  }
}

2.创建全局的解析配置

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import javax.annotation.PostConstruct;
@Configuration
public class DateHandlerAdapter {
  @Autowired
  private RequestMappingHandlerAdapter handlerAdapter;
  /**
   * 增加字符串转日期的全局适配器
   */
  @PostConstruct
  public void initEditableAvlidation() {
      ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) handlerAdapter
              .getWebBindingInitializer();
      if (initializer.getConversionService() != null) {
          GenericConversionService genericConversionService = (GenericConversionService) initializer
                  .getConversionService();
          genericConversionService.addConverter(new StringToDateConverter());
      }
  }
}

添加完这两个文件以后 在传参数类型为Date的参数时就不会再报 date解析失败的错误了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_42439513/article/details/96477831

延伸 · 阅读

精彩推荐