Converter
在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。
Converter接口
Converter<S, T>
接口定义了从类型S转换为类型T的转换器。
package org.springframework.core.convert.converter;
public interface Converter<S, T> { //S:源数据类型,T:转换后数据类型
T convert(S source);
}
示例:
假设我们有一个简单的User
类和一个UserDTO
类,我们想要将User
对象转换为UserDTO
对象,我们可以实现Converter
接口。
public class User {
private String username;
private String email;
// Getters and Setters
}
public class UserDTO {
private String username;
// Getters and Setters
}
//User类转换成UserDTO类
public class UserToUserDTOConverter implements Converter<User, UserDTO> {
@Override
public UserDTO convert(User user) {
if (user == null) {
return null;
}
UserDTO userDTO = new UserDTO();
userDTO.setUsername(user.getUsername());
return userDTO;
}
}
注册Converter
在Spring中,你可以将这个转换器注册到ConversionService
中,从而在你的应用程序中使用。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.DefaultConversionService;
@Configuration
public class ConverterConfig {
@Bean
public Converter<User, UserDTO> userToUserDTOConverter() {
return new UserToUserDTOConverter();
}
@Bean
public DefaultConversionService conversionService() {
DefaultConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(userToUserDTOConverter());
return conversionService;
}
}
ConverterFactory接口
ConverterFactory
可以根据需要生成多种转换器,避免在代码中直接创建具体的转换器实例。
package org.springframework.core.convert.converter;
public interface ConverterFactory<S, R> { //S:源类,R:目标类的基本类
<T extends R> Converter<S, T> getConverter(Class<T> targetType); //T == targetType 真正的目标类
}
示例
创建一个类实现ConverterFactory接口,重写convert方法
//将 S 参数化为要转换的起始类型,将 R 参数化为定义基本类型 您可以转换为的类的范围。然后实施 ,其中 T 是 R 的子类
@Component
//S:源数据类,R:目标类的基本类
public class StringToBaseEnumConverterFactory implements ConverterFactory<S, R> {
@Override
public <T extends R> Converter<S, T> getConverter(Class<T> targetType) { //T == targetType 真正的目标类形
return new Converter<S, T>() {
@Override
public T convert(S source) {
return null;
}
};
}
}
注册ConverterFactory
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Autowired
private StringToBaseEnumConverterFactory stringToBaseEnumConverterFactory;
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(this.stringToBaseEnumConverterFactory);
}
}
标签:convert,return,Converter,Spring,ConverterFactory,转换器,UserDTO,public
From: https://www.cnblogs.com/21CHS/p/18528866