目录
1、自定义转换器Convert,ConvertFactory
2、 @Controller类中添加@InitBinder方法-注册属性编辑器
二、自定义转换器Convert,ConvertFactory
1、 Convert,ConvertFactory两个功能接口
2、 实现WebMvcConfigurer接口,实现addFormatters方法:注册转换器。
3、Convert接口
三、@Controller类中添加@InitBinder方法-注册属性编辑器
2、PropertyEditor属性编辑器与WebDataBinder
一、类型转换的三种方法
1、自定义转换器Convert<S,T>,ConvertFactory<S,R>
2、 @Controller类中添加@InitBinder方法-注册属性编辑器
3、 POJO字段添加注解:
如Date字段添加@DateTimeFormat(pattern = “yyyy-MM-dd”)
二、自定义转换器Convert<S,T>,ConvertFactory<S,R>
1、 Convert<S,T>,ConvertFactory<S,R>两个功能接口:
-
当确定是某一具体类型转换时,只需要实现Convert<S,T>即可;
- 当确定是某一类类型转换,需要通过实现ConvertFactory<S,R>实现一个转换器工厂,这个转换器工厂中,调用一个带有泛型的Convert<S,T>的转换器,如Converter<String, T>。2、将转换器注册到SpringIoC容器中:
2、 实现WebMvcConfigurer接口,实现addFormatters方法:注册转换器。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private BaseEnumConvertFactory enumConvertFactory;
@Autowired
private DateConvert myDateConvert;
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(myDateConvert);//String-Date转换器
registry.addConverterFactory(enumConvertFactory);//自定义工厂转换器
}
}
3、Convert<S,T>接口
只有一个convert(S source)方法,实现该接口并实现convert方法即可;只能实现特定的两个类之间的转换。如String和Date之间的转换可以。
@FunctionalInterface
public interface Converter<S, T> {
@Nullable
T convert(S source);
}
public class DateConverter implements Converter<String, Date>{
@Override
public Date convert(String source) {
if(source != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
try {
return sdf.parse(source); //将字符串解析成日期类型
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}