文章目录
实现数据类型转换
1 Converter接口
@FunctionalInterface
public interface Converter<S, T> {
/**
提供类型转换的逻辑
*/
@Nullable
T convert(S source);
}
2 案例
之前通过InitBinder和DateTimeFormat注解实现过字符串转date,现在也可以通过Converter实现该功能
package study.wyy.spring.anno.web.convert;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author by wyaoyao
* @Description
* @Date 2021/2/15 7:49 下午
*/
@Component
public class String2DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
//1.判断来源是否有值
if (StringUtils.isEmpty(source)) {
throw new NullPointerException("Source can not be null!");
}
try{
//2.定义转换器
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//3.转换并返回
return format.parse(source);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
注册
package study.wyy.spring.anno.web.advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
public class DataFormatAdvice {
@Autowired
private Converter stringToDateConverter;
@InitBinder
public void dateBinder(WebDataBinder dataBinder){
//1.获取转换服务对象
ConversionService conversionService = dataBinder.getConversionService();
//2.判断conversionService是否为GenericConversionService类型
if(conversionService instanceof GenericConversionService){
//3.强转
GenericConversionService genericConversionService = (GenericConversionService)conversionService;
//4.添加类型转换器
genericConversionService.addConverter(stringToDateConverter);
}
}
}