【Java 高阶】一文精通 Spring MVC - 转换器(五)

在这里插入图片描述

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主

⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 高阶
🙉八股文专题:剑指大厂,手撕 Java 八股文

文章目录

      • 1. 什么是转换器
      • 2. 转换器的优缺点
      • 3. 转换器的应用场景
      • 4. 转换器的原理
      • 5. 内置转换器
      • 6. 自定义转换器

1. 什么是转换器

转换器是一种用于将一种数据类型转换为另一种数据类型的工具或组件。在编程中,数据类型的转换是常见的操作,例如将字符串转换为整数、将日期对象转换为字符串等。转换器提供了一种方便的方式来执行这些类型转换操作,使开发人员能够在不同的数据类型之间进行转换,并且可以根据需要进行自定义转换逻辑。

2. 转换器的优缺点

转换器的优缺点如下:
优点

  1. 灵活性:转换器提供了灵活的数据类型转换能力,可以将一种数据类型转换为另一种数据类型,满足不同的需求。
  2. 可扩展性:开发人员可以根据具体需求实现自定义转换器,以处理特定的数据类型转换场景。
  3. 代码重用:通过使用转换器,可以将常见的数据类型转换逻辑封装起来,使其可以在不同的地方重复使用,提高代码的重用性和可维护性。
  4. 数据校验:在进行数据类型转换时,转换器可以对数据进行校验,确保转换的准确性和有效性。

缺点

  1. 性能开销:转换器可能会引入额外的性能开销,特别是在处理大量数据或复杂转换逻辑时。
  2. 异常处理:转换器可能会抛出异常,需要进行适当的异常处理和错误处理。
  3. 转换规则管理:当有多个转换器存在时,需要管理和维护转换规则,确保正确的转换逻辑被应用。

3. 转换器的应用场景

转换器在软件开发中有很多应用场景,以下是一些常见的应用场景:

  1. 表单数据处理:当用户提交表单数据时,转换器可以将表单数据从字符串转换为目标数据类型,如整数、日期等,以便后续处理。
  2. 数据库操作:在与数据库进行交互时,转换器可以将数据库中的数据转换为应用程序所需的数据类型,或将应用程序中的数据转换为数据库所需的数据类型。
  3. 数据校验:转换器可以用于对输入数据进行校验和验证,确保数据的有效性和完整性。
  4. API调用:当与外部API进行交互时,转换器可以将数据转换为API所需的格式,或将API返回的数据转换为应用程序所需的格式。
  5. 数据序列化和反序列化:转换器可以将对象转换为字符串或字节流,以便在网络传输或持久化存储中使用,并将其反序列化为对象。
  6. 数据格式化和显示:转换器可以将数据格式化为特定的文本或显示格式,以便在用户界面上展示给用户。
  7. 数据转换和集成:在不同系统或组件之间进行数据交换时,转换器可以将数据从一个系统的格式转换为另一个系统的格式,实现数据的互操作性和集成。

这些只是转换器在软件开发中的一些常见应用场景,实际上转换器的应用范围非常广泛,可以根据具体需求和业务场景进行灵活应用。

4. 转换器的原理

转换器的原理是将一种数据类型转换为另一种数据类型的过程。转换器的实现通常涉及以下几个方面的原理:

  1. 数据类型识别:转换器需要能够识别原始数据的类型,以确定需要进行的转换操作。这可以通过检查数据的类型信息或使用特定的数据类型识别算法来实现。
  2. 转换逻辑:转换器需要根据源数据的类型和目标数据的类型,执行相应的转换逻辑。这可能涉及数据格式的解析、数值的计算、数据结构的转换等操作。
  3. 错误处理:转换器需要能够处理转换过程中可能出现的错误,例如数据格式不匹配、无效的数据等。适当的错误处理机制可以确保转换过程的稳定性和可靠性。
  4. 自定义转换规则:转换器通常允许开发人员定义自定义的转换规则,以满足特定的转换需求。这可以通过配置文件、注解或编程方式来实现。
  5. 性能优化:对于大规模数据转换或复杂转换逻辑,转换器的性能可能成为关键因素。因此,转换器的实现需要考虑性能优化策略,如缓存、并发处理等。

5. 内置转换器

在Spring MVC中,有一些内置的转换器用于处理请求参数的类型转换。以下是一些常见的Spring MVC内置转换器:

  1. String转换器:将请求参数直接转换为String类型。
  2. Integer、Long、Float、Double等基本类型转换器:将请求参数转换为相应的基本数据类型。
  3. Boolean转换器:将请求参数转换为Boolean类型。
  4. Date转换器:将请求参数转换为Date类型,支持多种日期格式。
  5. Enum转换器:将请求参数转换为枚举类型。
  6. 数组和集合转换器:将请求参数转换为数组或集合类型。
  7. 自定义对象转换器:可以通过实现Converter接口或使用注解来自定义对象的转换器。

这些内置转换器可以根据请求参数的类型自动进行类型转换,无需手动编写转换逻辑。如果需要自定义转换器,可以实现Converter接口或使用注解来指定转换规则。

6. 自定义转换器

在Spring MVC中,您可以自定义类型转换器来处理特定类型的请求参数转换。以下是一种常见的方法来实现自定义类型转换器:

  1. 创建一个实现了 Converter<S, T> 接口的转换器类,其中 S 是源类型, T 是目标类型。
import org.springframework.core.convert.converter.Converter;public class CustomConverter implements Converter<String, CustomType> {@Overridepublic CustomType convert(String source) {// 在这里实现从String到CustomType的转换逻辑// 返回转换后的CustomType对象}
}
  1. 在Spring配置文件(如XML配置文件或Java配置类)中注册自定义转换器。
<mvc:annotation-driven conversion-service="conversionService" /><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.example.CustomConverter" /></set></property>
</bean>

或者使用Java配置类:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new CustomConverter());}
}
  1. 在控制器中使用自定义类型。
@RestController
public class MyController {@RequestMapping("/myEndpoint")public String handleRequest(@RequestParam("customParam") CustomType customType) {// 处理CustomType类型的请求参数return "resultPage";}
}

我们创建了一个自定义的转换器 CustomConverter ,将请求参数从String类型转换为 CustomType 类型。然后将转换器注册到Spring MVC中,以便在控制器中使用自定义类型。

精彩专栏推荐订阅:在下方专栏👇🏻
✅ 2023年华为OD机试真题(A卷&B卷)+ 面试指导
✅ 精选100套 Java 项目案例
✅ 面试需要避开的坑(活动)
✅ 你找不到的核心代码
✅ 带你手撕 Spring
✅ Java 初阶

在这里插入图片描述

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

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

相关文章

LVS DR模式搭建

目录 一、DR模式概述 一、与NET模式的区别 二、操作命令图 三、搭建流程 一、首先配置三台虚拟机并配置环境&#xff08;关闭防火墙&#xff0c;宽容模式&#xff09; 二、ping通百度 三、在115.3的&#xff08;lvs&#xff09;虚拟机上安装 ipvsadm 四、调整ARP参数 五…

outlook等客户端报错:-ERR Login fail. Please using weixin token to login

使用outlook配置腾讯邮箱后&#xff0c;无法收取邮件&#xff0c;点击接收/发送所有文件夹&#xff0c; 提示报错&#xff1a; 任务“testqq.com - 正在接收”报告了错误(0x800CCC92):“电子邮件服务器拒绝您登录。请在“帐户设置”中验证此帐户的用户名及密码。 响应服务器:…

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…

内网安全:WMI协议与SMB协议横向移动

目录 网络拓扑图 网络环境说明 WMI协议 SMB协议 域内信息收集 WMI协议 - 横向移动 利用方式一&#xff1a;wmic命令 利用方式一&#xff1a;cscript 利用方式一&#xff1a;impacket SMB协议 - 横向移动 利用方式一&#xff1a;psexec 利用方式二&#xff1a;psexe…

Java在线OJ项目(三)、前后端交互API模块

Java在线OJ项目&#xff08;三&#xff09;、前后端交互API模块 1. 客户端向服务器请求所有题目 或者 单个题目前端获取所有题目获取一个题目 后端 2. 后端读取前端提交的代码&#xff0c;进行编译运行&#xff0c;返回结果前端提交代码后端处理 1. 客户端向服务器请求所有题目…

[bug日志]springboot多模块启动,在yml配置启动端口8081,但还是启动了8080

【问题描述】 配置的启动端口是8081&#xff0c;实际启动端口是8080 【解决方法】 1.检查application.yml的配置是否有错误(配置项中&#xff0c;显示白色就错&#xff0c;橙色无措) 2.检查pom.xml的打包方式配置项配置&#xff0c;主pom.xml中的配置项一般为&#xff1a;&l…

简述docker映射(Mapping)和挂载(Mounting)

映射的概念&#xff1a; 将容器内的端口映射到主机的端口上&#xff0c;这样就可以通过主机的网络接口与容器内部进行通信。主机上对应端口的请求会被转发到容器内部&#xff0c;从而实现对容器内部程序的通信访问&#xff08;注意&#xff01;这里提到的容器内部的端口并不一定…

UE学习记录03----UE5.2 使用拖拽生成模型

0.创建蓝图控件&#xff0c;自己想要展示的样子 1.侦测鼠标拖动 2.创建拖动操作 3.拖动结束时生成模型 3.1创建actor , 创建变量EntityMesh设为可编辑 生成Actor&#xff0c;创建变量EntityMesh设为可编辑 屏幕鼠标位置转化为3D场景位置 4.将texture设置为变量并设为可编辑&am…

【1267. 统计参与通信的服务器】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff…

kali linux查看局域网下所有IP,并对指定IP攻击

kali linux查看局域网下所有IP&#xff0c;并对指定IP实施局域网内攻击 首先我们打开我们熟悉的kali linux操作系统&#xff0c;利用指令&#xff1a; ifconfig来确认本机的ip地址 确认了本机的ip地址之后&#xff0c;利用一下的指令查看局域网下所有ip: fping -g 本机IP地址…

Visual Studio 2022离线源码编译onnxruntime

1. 首先参考前述文章《Visual Studio 2019源码编译cpu版本onnxruntime_xunan003的博客-CSDN博客》第1~3步&#xff0c;将anaconda python3.8虚拟环境copy至内网离线环境envs中。 并将下载的onnxruntime包迁移至内网固定位置&#xff1b; 2.查看onnxruntime/cmake/external所依…

第一讲使用IDEA创建Java工程——HelloWorld

一、前言导读 为了能够让初学者更快上手Java,不会像其他书籍或者视频一样,介绍一大堆历史背景,默认大家已经知道Java这么编程语言了。本专栏只会讲解干货,直接从HelloWord入手,慢慢由浅入深,讲个各个知识点,这些知识点也是目前工作中项目使用的,而不是讲一些老的知识点…