当前位置: 首页 > news >正文

【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 初阶

在这里插入图片描述

相关文章:

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

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

【HSPCIE仿真】输入网表文件(1)基本内容和基本规则

输入网表文件 1. 输入网表文件基本内容2. 输入网表文件示例3. 一些基本规则4. 数值表示5. 压缩文件格式的读取6. 参数和表达式 从HSPICE的仿真流程看&#xff0c;出去初始化配置过程&#xff0c;真正的仿真是从输入网表文件开始的。 HSPICE 根据输入网表文件&#xff08; inpu…...

IBM Db2 笔记

目录 1. IBM Db2 笔记1.1. 常用命令1.2. 登录命令行模式 (Using the Db2 command line processor)1.3. issue1.3.1. db2: command not found/SQL10007N Message "-1390" could not be retreived. Reason code: "3".1.3.2. db2 修改 dbm cfg 的时候报 SQL50…...

【Cortex-M3权威指南】学习笔记2 - 指令集

目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式&#xff08;注释使用一个分号…...

Java——一个Java实体类,表示一个试题的模型

这段代码是一个Java实体类&#xff0c;表示一个试题的模型。 该实体类具有以下属性&#xff1a; id&#xff1a;题号&#xff0c;表示试题的编号。title&#xff1a;题目&#xff0c;表示试题的题目内容。optionA&#xff1a;选项A&#xff0c;表示试题的选项A。optionB&#…...

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消&#xff0c;不过在PHP官方的参考手册中&#xff0c;已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数&#xff0c;都可以直接简单的通过函数名调佣。函数的引用大致有下面3种&#xff1a; 1.1、如果是PHP的内置函…...

华为OD机试真题【最大利润】

1、题目描述 【最大利润】 商人经营一家店铺&#xff0c;有number种商品&#xff0c;由于仓库限制每件商品的最大持有数量是item[index] 每种商品的价格是item-price[item_index][day] 通过对商品的买进和卖出获取利润 请给出商人在days天内能获取的最大的利润 注&#xff1a;…...

YOLOv5+deepsort实现目标追踪。(附有各种错误解决办法)

一、YOLOv5算法相关配置 🐸这里如果是自己只想跑一跑YOLOV5的话,可以参考本章节。只想跑通YOLOv5+deepsort的看官移步到下一章节。 1.1 yolov5下载 🐸yolov5源码在github下载地址上或者Gitee上面都有。需要注意的是由于yolov5的代码库作者一直在维护,所以下载的时候需…...

java.8 - java -overrideoverload 重写和重载

重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 重写的好处在于子类可以根据需要&#xff0c;定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不…...

oracle通配符大全

用于where比较条件的有 &#xff1a; 等于&#xff1a;、<、<、>、>、<> >,<:大于&#xff0c;小于 >.<:大于等于&#xff0c;小于等于 :等于 !,<>,^:不等于 包含&#xff1a;in、not in exists、not exists 范围&#xff1a;betwe…...

浏览器开发者工具平台js代码开启展开收起

1、如下js左侧可以展开和收起段落&#xff0c;需要打开右上角的设置 2、Preferences这里勾选Code folding 即可像上面那张图展开和收起js段落代码 3、然后重新打开开发者工具&#xff0c;随意打开一个js文件&#xff0c;这里就有缩放了...

opencv 案例实战01-停车场车牌识别实战

需求分析&#xff1a; 车牌识别技术主要应用领域有停车场收费管理&#xff0c;交通流量控制指标测量&#xff0c;车辆定位&#xff0c;汽车防盗&#xff0c;高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安&#xff0c;防止交通堵塞…...

【PHP】PHP开发教程-PHP开发环境安装

1、PHP简单介绍 PHP&#xff08;全称&#xff1a;Hypertext Preprocessor&#xff09;是一种广泛使用的开放源代码脚本语言&#xff0c;特别适用于Web开发。它嵌入在HTML中&#xff0c;通过在HTML文档中添加PHP标记和脚本&#xff0c;可以生成动态的、个性化的Web页面。 PHP最…...

AURIX TriCore内核架构学习笔记

名词缩写 ISA - Instruction Set Architecture&#xff0c;指令集架构PC - Program Counter, holds the address of the instruction that is currently runningGPRs - 32 General Purpose RegistersPSW - Program Status WordPCXI - Previous Context InformationCSA - Conte…...

VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小

文章目录 VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小引言创建ESXi7.0可启动 U 盘结果检查VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小 引言 本文讲述了在 J1900平台上安装ESXi7.0时减少 VMFSL 分区占用的说明, 通常这来说些主机内置的磁盘空间非常小, 采用默认安…...

4.网络设计与redis、memcached、nginx组件(二)

系列文章目录 第四章 网络设计与redis、memcached、nginx组件(一) 第五章 网络设计与redis、memcached、nginx组件(二) 文章目录 系列文章目录[TOC](文章目录) 前言一、reactor模型&#xff1f;二、Reactor 开发1.建立连接 三、典型reactor 模型单reactor 模型典型 readisradi…...

后端开发有哪几种语言? - 易智编译EaseEditing

后端开发是构建应用程序的一部分&#xff0c;负责处理服务器端的逻辑、数据库交互和数据处理。有许多编程语言可用于后端开发&#xff0c;以下是一些常见的后端开发语言&#xff1a; Java&#xff1a; Java是一种广泛使用的面向对象编程语言&#xff0c;具有强大的跨平台能力。…...

Spring 学习源码的基础 核心原理与核心概念

文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…...

cpolar做一个内网穿透

因为不在公司&#xff0c;需要访问公司的数据库&#xff0c;所以做一个内网穿透 下载安装 下载地址&#xff1a; https://dashboard.cpolar.com/get-started 下载后是个压缩包&#xff0c;解压后傻瓜式安装 操作隧道 安装后打开Cpolar Web UI 登录账号&#xff0c;查看隧…...

自动驾驶——最优控制算法(LQR)工程化总结

1. Summary 时隔一年&#xff0c;从写下第一篇博文自动驾驶-LQR工程实现&#xff08;调研&#xff09;&#xff0c;到近段时间&#xff0c;真正在我们的控制器上运行最优控制算法&#xff08;LQR&#xff09;&#xff0c;一步一个脚印&#xff0c;从开始只是知道其“控制理论”…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...