必备开发技能!基于Spring Boot各种场景下的数据类型转换技巧

文摘   2024-10-20 11:30   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:Spring Boot3.2.5



1. 简介

在Spring中,类型转换(Type Conversion)是一个非常重要的一项功能,它能非常方便的将一种数据类型转换为另一种数据类型。Spring提供了一套强大的类型转换机制,使得开发者能够轻松地处理各种类型的数据转换需求,尤其是在Web应用中处理表单提交的数据时。

Spring的类型转换主要通过ConversionService接口来实现,该接口定义了执行类型转换的方法。GenericConversionService是ConversionService的一个具体实现类,提供了添加自定义转换器的功能,允许用户注册自己的转换逻辑以满足特定业务场景下的需求。此外,Spring还引入了ConverterConverterFactory接口,前者用于简单的点对点类型转换,而后者则适用于更复杂的转换场景,比如从一个源类型到多个目标类型的转换。

本文并不旨在介绍如何具体使用相关API,而是聚焦于在不同应用场景下数据类型转换的方法。我们将探讨在以下几种情况下如何实现类型的转换:

  • @Value

当使用 @Value 注解进行配置数据绑定时,对于简单的数据类型(如字符串、整数等),Spring 默认的类型转换器已经足够。但是,遇到复杂对象的情况时,例如将配置文件中的字符串直接绑定到一个自定义对象上,Spring 就不知道该如何转换了。

public class ValueProperties {  @Value("${pack.app.object}")  private User user ;}

如果配置文件中设置如下值:

pack:  app:    object: Pack,33

像这种情况我们该如何实现呢?

  • @ConfigurationProperties

@ConfigurationProperties 是由 Spring Boot 提供的一个注解,可以用来将一组相关的配置属性绑定到一个 Java 类上。这通常用于将配置文件中的属性映射到类的字段。

@Component@ConfigurationProperties(prefix = "pack.app")public class PackProperties {
  private User object ;  // 其它属性  // getters, setters}

配置文件中针对这里User复杂对象也是上面的形式,Spring就无能为力了。

  • Web接口参数

如果不是特殊情况下,我们几乎不需要任何额外的编码来实现接口参数的读取转换,但是如遇到如下情况下该如何处理呢?

@RestController@RequestMapping("/users")public class UserController {  @GetMapping("")  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 注解进行复杂对象的配置数据绑定

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章