首页 > 其他分享 >Spring-Converter类型转换器

Spring-Converter类型转换器

时间:2024-11-05 21:24:18浏览次数:1  
标签:convert return Converter Spring ConverterFactory 转换器 UserDTO public

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

相关文章

  • springcloud
    SpringCloud微服务架构随着互联网的不断发展,软件系统的架构也是在不断的更新。由原先的单体架构逐渐演变成分布式系统架构,再到目前非常主流的微服务系统架构。分布式系统架构是指将一个软件系统分割成多个独立的服务,并且这些服务可以在不同的计算机或服务器上运行,并通过网络进......
  • 零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG
    零基础学习SpringAIJavaAI使用向量数据库postgresql检索增强生成RAG向量数据库是一种特殊类型的数据库,在人工智能应用中发挥着至关重要的作用。在向量数据库中,查询与传统的关系数据库不同。它们不是进行精确匹配,而是执行相似性搜索。当给定一个向量作为查询时,向量数......
  • 解决springboot中的大事务问题:改用编程式事务
    1.问题:原方法中有很多不需要进行事务控制的方法,一旦使用了事务注解会导致接口超时,高并发情况下数据库连接池消耗过大,回滚时间过长等问题@TransactionalpublicvoidbigTransactional(){adminMapper.selectById(1);adminMapper.selectById(2);......
  • SpringBoot物资管理系统的设计与实现1yyr5程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着企业规模的扩大和业务复杂度的提升,物资管理成为企业运营中的关键环节。传统的手工管理模式存在信息更新滞后、流程繁琐等问题,已难......
  • SpringBoot物流管理系统f5xx1--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着全球经济一体化和电子商务的迅猛发展,物流行业在国民经济中的地位日益凸显。然而,传统的物流管理方式已难以满足现代企业对高效、快......
  • 基于SpringBoot+Vue的库存管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的库存试管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品......
  • SpringBoot物流管理系统6h34w(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景随着电商行业的蓬勃发展和市场竞争的日益激烈,物流管理已成为企业运营中的关键环节。传统的人工物流管理方式已无法满足现代企业对高效......
  • 基于SpringBoot+Vue的疗养院管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:        大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的疗养院管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品......
  • SpringBoot网文论坛管理系统5w669(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着网络文学的兴起和读者群体的扩大,网文论坛成为作者与读者交流的重要平台。然而,现有的网文论坛普遍存在管理不便、信息杂乱等......
  • Vue+Springboot 前后端分离项目如何部署?
    本文转载自:https://fangcaicoding.cn/course/11/58大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验,截止目前面试过近200位候选人,主导过单表上10亿、累计上100亿数据量级的业务系统的架构和核心编码。“学编程,一定要系统化”是我一直坚持......