当前位置: 首页 > 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;从开始只是知道其“控制理论”…...

【微服务】05-网关与BFF(Backend For Frontend)

文章目录 1.打造网关1.1 简介1.2 连接模式1.3 打造网关 2.身份认证与授权2.1 身份认证方案2.1.1 JWT是什么2.1.2 启用JwtBearer身份认证2.1.3 配置身份认证2.1.4 JWT注意事项 1.打造网关 1.1 简介 BFF(Backend For Frontend)负责认证授权&#xff0c;服务聚合&#xff0c;目标…...

保证MQ的高可用的几种方案

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 「java、python面试题」…...

MySql013——函数

一、数据处理函数 1.1、文本处理函数 函 数 说 明 Left() 返回串左边的字符Length() 返回串的长度Locate() 找出串的一个子串Lower() 将串转换为小写LTrim() 去掉串左边的空格Right() 返回串右边的字符RTrim() 去掉串右边的空格Soundex() 返回串…...

k8s-dashboard使用指导手册

一、访问 dashboard http://172.66.209.101:32001 二、选择 Namespace 如下图&#xff1a; 1 在①搜索框中输入 spms 2 在②选择 spms-cloud 三、查找 pod 1 打开 pod 列表 2 打开过滤窗口 3 搜索 pod 在打开的搜索框中输入 pod的关键字&#xff0c;支持模糊搜索 如搜索…...

Python爬虫快速入门指南

引言&#xff1a; 网络爬虫是一种自动化程序&#xff0c;可以在互联网上搜集和提取数据。Python作为一种功能强大且易学的编程语言&#xff0c;成为了许多爬虫开发者的首选。本文将为你提供一个关于Python爬虫的快速入门指南&#xff0c;包括基本概念、工具和实际案例。 第一…...

Java人脸识别技术探索与实践

人脸识别技术作为生物特征识别领域的一项重要应用&#xff0c;近年来在安全、便捷以及科研等方面取得了显著的进展。在Java编程领域&#xff0c;人脸识别也得到了广泛的关注和应用。本文将介绍Java中人脸识别技术的基本概念、常用库以及实际示例代码&#xff0c;带您深入了解这…...

【鞋服零售ERP】之要货申请单设计思路

引言 要货申请单在本系统中也是一张较为核心的单据&#xff0c;整体的思路是将其池化&#xff0c;解决收发货方业务简化&#xff0c;账务处理逻辑化的设计理念。首先鞋服零售ERP就是基于多组织的业务架构&#xff0c;多销售组织和店铺属性&#xff1b;其次是在零售如何在业处处…...

EWM怎么取消pinking,SAP_EWM取消拣配报错处理方式

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…...

TensorFlow 的基本概念和使用场景

TensorFlow 是 Google 开源的机器学习框架&#xff0c;它支持使用数据流图&#xff08;Data Flow Graph&#xff09;的方式进行计算&#xff0c;以实现大规模分布式机器学习应用。TensorFlow 在深度学习、自然语言处理、计算机视觉等领域有广泛应用。 TensorFlow 中的重要概念…...

openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)

一、使用openssl rsautl 进行加密、解密、签名、验证 [kyzjjyyzc-zjjcs04 openssl]$ openssl rsautl --help Usage: rsautl [options] -in file input file -out file output file -inkey file input key -keyform arg private key format - default PEM …...

哪些做图形推理的网站/图片识别

http://www.redbooks.ibm.com/portals/tivoli...

校级特色专业建设网站/免费推广

总结&#xff1a; 1.webview 无法直接更改view的属性&#xff0c;可以通过 handler实现&#xff0c;因为跨线程 2.webview可以通过js api读取 view的属性值 代码&#xff1a; private Handler myhandler new Handler() { Override public void handleMessage(Message msg) {…...

wordpress网站 添加微信/一手渠道推广平台

首先简述一下自动化测试对于数据库的应用场景&#xff1a;无论在接口自动化还是UI自动化的测试中&#xff0c;我们都需要准备一些测试数据&#xff0c;类似于账号信息。比如我们需要一个未注册的手机号&#xff0c;我们不能保证给出的测试数据是未注册的&#xff0c;这个时候就…...

商务网站的功能和建设/个人外包接单平台

目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员&#xff0c;如何查看各个时间段每个组员的代码提交量&#xff0c;下…...

网站建设简单个人主页/酒店如何进行网络营销

希望shell和一个程序都同时接收一个ctrl-c&#xff0c;最好的办法就是将它们设置到一个进程组当中&#xff0c;并且把这个进程组设置为终端上的前台进程组&#xff0c;如下所示&#xff0c;其中2774是该终端上bash进程的pid&#xff1a; void handler(int n) { printf(…...

网站视频链接怎么做的/有哪些可以推广的平台

2017计算机应用基础试题(附答案)选择题&#xff1a;1. 在计算机应用中&#xff0c;“计算机辅助设计”的英文缩写为___________。 A. CAD B. CAM C. CAE D. CAT2. 微型计算机中&#xff0c;合称为中央处理单元(CPU)的是指___________。 A.运算器和控制器 B.累加器和算术逻辑运算…...