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