最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:Spring Boot3.2.5
1. 简介
在Spring中,类型转换(Type Conversion)是一个非常重要的一项功能,它能非常方便的将一种数据类型转换为另一种数据类型。Spring提供了一套强大的类型转换机制,使得开发者能够轻松地处理各种类型的数据转换需求,尤其是在Web应用中处理表单提交的数据时。
Spring的类型转换主要通过ConversionService接口来实现,该接口定义了执行类型转换的方法。GenericConversionService是ConversionService的一个具体实现类,提供了添加自定义转换器的功能,允许用户注册自己的转换逻辑以满足特定业务场景下的需求。此外,Spring还引入了Converter和ConverterFactory接口,前者用于简单的点对点类型转换,而后者则适用于更复杂的转换场景,比如从一个源类型到多个目标类型的转换。
本文并不旨在介绍如何具体使用相关API,而是聚焦于在不同应用场景下数据类型转换的方法。我们将探讨在以下几种情况下如何实现类型的转换:
@Value
当使用 @Value
注解进行配置数据绑定时,对于简单的数据类型(如字符串、整数等),Spring 默认的类型转换器已经足够。但是,遇到复杂对象的情况时,例如将配置文件中的字符串直接绑定到一个自定义对象上,Spring 就不知道该如何转换了。
public class ValueProperties {
private User user ;
}
如果配置文件中设置如下值:
pack:
app:
Pack,33 :
像这种情况我们该如何实现呢?
@ConfigurationProperties
@ConfigurationProperties
是由 Spring Boot 提供的一个注解,可以用来将一组相关的配置属性绑定到一个 Java 类上。这通常用于将配置文件中的属性映射到类的字段。
public class PackProperties {
private User object ;
// 其它属性
// getters, setters
}
配置文件中针对这里User复杂对象也是上面的形式,Spring就无能为力了。
Web接口参数
如果不是特殊情况下,我们几乎不需要任何额外的编码来实现接口参数的读取转换,但是如遇到如下情况下该如何处理呢?
"/users") (
public class UserController {
"") (
public User save(User user) {
// TODO
}
}
这里是GET请求,Spring MVC也是支持的,我们可以通过如下接口进行访问:
/users?name=xxxooo&age=20
我们只需要在请求时把User对应的属性作为参数传递即可。
但是对于如下接口参数形式
/users?user=XXXOOO,66
这种请求参数,Spring MVC是不知道如何进行处理的。所以这就需要我们自定义类型转换器了。
接下来,我们将针对上述三种情况进行详细的讲解。
2. 实战案例
2.1 使用 @Value 注解进行复杂对象的配置数据绑定