简介
在Spring框架中,Converter接口用于实现类型转换的功能。它定义了一个简单的方法,用于将一种类型的对象转换为另一种类型的对象。
源码
@FunctionalInterface
public interface Converter<S, T> {
/**
* S:原类型
* T:目标类型
* 我们需要将S转换成T
*/
@Nullable
T convert(S source);
}
private static class IntegerConverter implements Converter<String, Integer> {
@Override
public Integer convert(String source) {
return Integer.parseInt(source);
}
}
final class StringToUUIDConverter implements Converter<String, UUID> {
@Override
@Nullable
public UUID convert(String source) {
return (StringUtils.hasLength(source) ? UUID.fromString(source.trim()) : null);
}
}
示例
要使用自定义的Converter,你需要将其注册到Spring容器中。可以通过以下方式之一进行注册:
使用@Component注解将自定义的Converter类标记为Spring组件,并在配置类中使用@EnableConversion注解启用类型转换支持。Spring会自动扫描并注册带有@Component注解的类。
@Component
public class CustomConverter implements Converter<String, CustomType> {
@Override
public CustomType convert(String source) {
// 实现类型转换逻辑
}
}
@Configuration
@EnableConversion
public class AppConfig {
// 其他配置
}
手动将自定义的Converter注册到ConversionService中。你可以通过实现ConversionService接口或使用DefaultConversionService类来创建ConversionService实例,并将自定义的Converter添加到其中。然后,你可以将ConversionService注入到其他组件中,以便进行类型转换。
@Configuration
public class AppConfig {
@Bean
public ConversionService conversionService() {
DefaultConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(new CustomConverter());
return conversionService;
}
}
无论你选择哪种方式,Spring都会自动处理类型转换,并在需要时调用相应的Converter。你可以在方法参数上使用@Convert注解来指定要使用的Converter,或者在控制器方法中使用@RequestBody注解来自动进行JSON到Java对象的转换。
总之,Spring中的Converter接口提供了一种灵活的方式来实现自定义的类型转换,以满足应用程序的需求。