开启类型转换器

news/2024/12/28 23:00:22/文章来源:https://www.cnblogs.com/zyb-luckey/p/18638101

如何添加多个类型转换器?

你可以通过以下两种方式在 Spring 中配置多个类型转换器:

方式一:通过 @Configuration 配置类

你可以在 Spring 配置类中使用 @Configuration 注解注册多个类型转换器。这是在 Spring 中最常用的做法。

java
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addConverters(ConverterRegistry registry) { registry.addConverter(new StringToDateConverter()); registry.addConverter(new StringToIntegerConverter()); registry.addConverter(new StringToEnumConverter()); } }

在上面的例子中,addConverters 方法添加了多个类型转换器。每个转换器都是一个实现了 Converter<S, T> 接口的类。你可以根据需要实现多个类型转换器,并通过 addConverter 将它们注册到 Spring 中。

方式二:通过 XML 配置

如果你是通过 XML 配置 Spring 项目,也可以注册多个类型转换器:

xml
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.example.converter.StringToDateConverter" /> <bean class="com.example.converter.StringToIntegerConverter" /> <bean class="com.example.converter.StringToEnumConverter" /> </set> </property> </bean>

这里的 FormattingConversionServiceFactoryBean 会将多个转换器加载到 ConversionService 中。

3. 定义多个类型转换器

在 Spring 中,每个类型转换器都实现了 Converter<S, T> 接口。你可以定义多个不同的转换器来支持不同类型之间的转换。

例如,定义一个 StringToDate 转换器:

java
public class StringToDateConverter implements Converter<String, Date> { @Override public Date convert(String source) { try { return new SimpleDateFormat("yyyy-MM-dd").parse(source); } catch (ParseException e) { throw new IllegalArgumentException("Invalid date format"); } } }

类似的,你可以定义其他类型的转换器:

java
public class StringToIntegerConverter implements Converter<String, Integer> { @Override public Integer convert(String source) { return Integer.parseInt(source); } }

4. 如何处理复杂的类型转换?

有时你可能需要做一些复杂的转换,比如转换成嵌套对象、集合或者数组类型。Spring 允许你自定义这些转换器。

例如,转换一个字符串为一个枚举:

java
public enum Status { PENDING, APPROVED, REJECTED } public class StringToStatusConverter implements Converter<String, Status> { @Override public Status convert(String source) { return Status.valueOf(source.toUpperCase()); } }

处理集合类型的转换:

例如,将字符串列表转换为整数列表:

java
public class StringToIntegerListConverter implements Converter<String, List<Integer>> { @Override public List<Integer> convert(String source) { String[] values = source.split(","); List<Integer> result = new ArrayList<>(); for (String value : values) { result.add(Integer.parseInt(value.trim())); } return result; } }

5. Spring 中的内建转换器

Spring 还提供了一些常见的内建类型转换器,例如:

  • StringToIntegerConverter:将字符串转换为整数。
  • StringToDateConverter:将字符串转换为 Date
  • StringToBooleanConverter:将字符串转换为布尔值。
  • StringToEnumConverter:将字符串转换为枚举类型。

6. 类型转换器与数据绑定

在 Spring MVC 中,类型转换器通常与数据绑定一起使用。例如,在处理表单提交时,Spring 会自动将请求参数转换为相应的 Java 对象。这些转换器在数据绑定过程中会自动调用,无需开发人员手动干预。

7. 总结

  • Spring 允许你使用多个类型转换器来处理不同类型之间的转换。
  • 你可以通过 @Configuration 或 XML 配置来注册多个转换器。
  • 每个类型转换器实现了 Converter<S, T> 接口,可以为不同的类型提供转换逻辑。
  • Spring 提供了一些常见的内建转换器,也允许你实现自定义的复杂转换器。

如果你的项目中有很多不同类型的转换需求,可以通过添加多个转换器来扩展类型转换的功能,并确保你的数据在不同的层之间能够正确转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860602.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

说明与笔记导航(1228CMT基本完工)

更新进度:CMT除二维平面应力,其余均有初版笔记。为什么写这么多B东西? 其一呢是帮助我自己,边写笔记边梳理知识;其二呢是帮助各位义父义母考试成功。 更新进度与内容说明 12.27:突击复习CMT,其中中心差分和迎风差分已更新,交错网格、SIMPLE和SIMPLEC的很快跟进。 目前进…

6 求解三对角矩阵

6 求解三对角矩阵 背景 对于求解线性代数方程组\(Ax=B\)​,有两种方法:直接法:通过有限步骤的算术运算求解线性方程组。克拉默法则(Cramers Rule) ​ 这里D是矩阵A的行列式(det(A)),\(D_j\)是把矩阵A的第j列替换成b后求得的新矩阵A的行列式。 矩阵求逆:\(x=A^{-1}B\)​…

软工总结

软工总结 对于软件工程课程的想象 在最初看到这个与某专业重名的课程名时就隐隐猜到这门课绝对不简单,事实也正是如此。 起初我是希望能够摆脱ai的束缚,尽量多自己写代码来提升自己的综合水平,但一学期下来仍然是让ai担任了更多的工作。。。 但值得庆幸的是,通过这一学期的…

Ubuntu20.04安装Qt5.15.2并配置qml_ros_plugin插件

安装Qt Qt老版本采用离线安装,新版本采用在线安装器安装,在官网安装速度很慢,一般在国内的源下载。 在中科大源下载Qt在线安装器http://mirrors.ustc.edu.cn/qtproject/official_releases/online_installers/安装依赖 sudo apt install gcc g++ make cmake build-essential …

java-BLOG-3

一.前言: 期末测验: 本次测验主要是关于谷仓的体积的计算,一个是长方体,一个是圆柱体,比较两个体积的大小。第一个题目是算这两个体积的大小,第二个题目加上了圆锥体,第三个题目是从小到大排序这三个体积,并按需输出这三个体积。本次测验计算过程是不难的,主要是要注意…

云服务器内网无法相互访问

您好,关于您提到的云服务器内网无法相互访问的问题,我们已经进行了详细的排查和分析。根据您的描述,服务器在升级后出现了内网端口无法相互访问的情况,特别是127.0.0.1之间的通信出现问题,导致部分数据包丢失或无法正常连接特定端口(如2187)。此外,您还提到使用curl命令…

FTP读取目录总是失败

您好,关于您反馈的FTP读取目录总是失败的问题,我们已经进行了初步的排查和分析。根据您的描述,FTP连接本身是正常的,但在读取目录时遇到了失败。这种情况可能由多种原因引起,以下是我们为您提供的详细解决方案:FTP服务器配置检查:首先,请确认FTP服务器的配置是否正确。…

登录后台提示错误500

您好,关于您反馈的登录后台提示错误500的问题,我们已经进行了详细的排查和分析。根据您的描述,登录后台时遇到了500内部服务器错误,这通常是由于服务器端出现了某种异常导致的。以下是我们的分析和建议:数据库连接问题:您提到连接的是非本公司数据库,这可能是导致问题的…

2024第一届Solar杯应急响应挑战赛

学习2024第一届Solar杯应急响应挑战赛 附件密码:KzXGabLkDjs&j@3a&fAayNmD数据库 这里导入镜像有个问题会报错 Failed to write content to disk F:\长城杯+国赛\应急比赛\【题目】小题+综合题\solar\mssql\mssql\\mssql-disk1.vmdk. Reason: There is not enough spa…

【攻防技术系列】反弹shell:数据不出网

数据不出网:限制出网协议,不是所有的协议、IP不出网 不出网一般是针对出站的。流程: 1.判断出入站规则限制 2.判断出入限制的端口和协议 3.分析原因用正向、反向、隧道解决问题 产生原因: 主机、应用防火墙、云、工具出站限制 所有的限制都是相对于这台服务器 出站规则:自…

22207223-王颖对于家居强电电路模拟程序3~4的总结

一、前言 1.家居强电电路模拟程序3 1.1知识点 (1)面向对象编程(OOP)类与对象:需要设计多个类,如设备类(电路设备类)、受控设备类、控制设备类、串联电路类、并联电路类等。 继承与多态:受控设备类和控制设备类可以继承自电路设备类,利用继承实现代码复用和扩展。 接口与…