最近在项目中想自定义一个LocalDate的参数解析器。
@FunctionalInterface
public interface Converter<S, T> {
@Nullable
T convert(S var1);
}
转换器接口定义了两个泛型:S,T
接收S类型,返回T类型
自定义时间工具类部分代码如下
/**
* @author mouxiaoshi
*/
public class DateUtil {
public static final String yyyyMMdd = "yyyyMMdd";
public static final String yyyy_MM_dd = "yyyy-MM-dd";
public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
/**
* 字符串转LocalDate
* @param s
* @return
*/
public static LocalDate stringToLocalDate(String s){
return LocalDate.parse(s, DateTimeFormatter.ofPattern(yyyy_MM_dd));
}
}
自定义参数解析器定义
@Bean
public Converter<String, LocalDate> dateConvert() {
return DateUtil::stringToLocalDate;
}
启动报错:
Caused by: java.lang.IllegalArgumentException: Unable to determine source type <S> and target type <T> for your Converter [com.***.$$Lambda$500/1552018400]; does the class parameterize those types?
修改为:
@Bean
public Converter<String, LocalDate> dateConvert() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String s) {
return DateUtil.stringToLocalDate(s);
}
};
}
顺利启动,具体原因在该篇文章上有详细说明。
深入资料: