spring boot注册一个全局的类型转换器,转换表单中的string 到Date
@Configuration
public class WebConfig {
// IMPORTANT: keep the order
private final static String[] dateFormats = {
"EEE, d MMM yyyy HH:mm:ss z",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd HH:mm:ss.SSSZ",
"yyyy-MM-dd HH:mm:ssZ",
"yyyy-MM-dd HH:mm:ss.SSS",
"yyyy-MM-dd HH:mm:ss"};
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
@PostConstruct
public void addConversionConfig() {
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();
if (initializer.getConversionService() != null) {
GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();
genericConversionService.addConverter(new StringToDateConverter());
}
}
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String dateString) {
Assert.hasText(dateString, "Null or emtpy date string");
// Supported date formats:
// EEE, d MMM yyyy HH:mm:ss z e.g. Fri, 20 Aug 2016 08:45:15 GMT
// yyyy-MM-dd HH:mm:ss.SSSZ e.g. 2016-08-19 17:36:20.235+0800
// yyyy-MM-dd'T'HH:mm:ss.SSSZ e.g. 2016-08-19T17:36:20.235+0800
// yyyy-MM-dd HH:mm:ssZ e.g. 2016-08-19 17:36:20+0800
// yyyy-MM-dd HH:mm:ss.SSS (UTC time), e.g. 2016-08-19 09:36:20.235
// yyyy-MM-dd HH:mm:ss (UTC time), e.g. 2016-08-19 09:36:20
Date date = DateUtils.parseDate(dateString, dateFormats);
if (date == null) {
String errMsg = String.format("Failed to convert [%s] to [%s] for value '%s'", String.class.toString(), Date.class.toString(), dateString);
throw new IllegalArgumentException(errMsg);
}
return date;
}
}
}