【Java 中级】一文精通 Spring MVC - 数据格式化器(六)

在这里插入图片描述

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

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

文章目录

      • 1. 什么是数据格式化器
      • 2. 数据格式化器的应用场景
      • 3. DateFormatter
      • 4. NumberFormatter
      • 5. CurrencyFormatter
      • 6. DateFormatterRegistrar
      • 7.FormattingConversionServiceFactoryBean
      • 8. 自定义格式化器

1. 什么是数据格式化器

SpringMVC 内置数据格式化是指在 SpringMVC 框架中,可以自动将请求参数或响应数据进行格式化。这样可以方便地将数据从一种格式转换为另一种格式,例如将字符串转换为日期对象,或将数字格式化为货币形式等。

SpringMVC 内置了许多常见的数据格式化器,可以通过注解或配置文件进行配置和使用。以下是一些常见的内置数据格式化器:

  1. DateFormatter:用于将日期字符串转换为日期对象,或将日期对象格式化为指定的日期字符串格式。
  2. NumberFormatter:用于将数字字符串转换为数字对象,或将数字对象格式化为指定的数字字符串格式。
  3. CurrencyFormatter:用于将数字对象格式化为指定的货币字符串格式。
  4. DateFormatterRegistrar:用于注册自定义的日期格式化器。
  5. FormattingConversionServiceFactoryBean:用于配置和管理数据格式化器。

要使用内置数据格式化器,可以在 SpringMVC 的配置文件中进行相应的配置。例如,可以使用 <mvc:annotation-driven> 标签启用注解驱动的数据格式化支持,并在相应的字段或方法上使用 @DateTimeFormat@NumberFormat 等注解来指定数据格式化方式。

如果内置的数据格式化器无法满足需求,还可以自定义数据格式化器来处理特定的格式化需求。可以实现 SpringMVC 的 Formatter 接口,并将其注册到 SpringMVC 的配置中。

2. 数据格式化器的应用场景

数据格式化器在 SpringMVC 中有很多应用场景。以下是一些常见的应用场景:

  1. 表单提交:当用户提交表单数据时,可以使用内置数据格式化器将用户输入的数据转换为目标对象的属性类型。例如,将字符串转换为日期对象、将字符串转换为数字对象等。

  2. 数据展示:在将数据展示给用户时,可以使用内置数据格式化器将数据格式化为用户友好的形式。例如,将日期对象格式化为指定的日期字符串格式、将数字对象格式化为货币形式等。

  3. 数据校验:在进行数据校验时,可以使用内置数据格式化器来验证输入数据的格式是否符合要求。例如,验证日期字符串是否符合指定的日期格式、验证数字字符串是否符合指定的数字格式等。

  4. 数据持久化:在将数据持久化到数据库或其他存储介质时,可以使用内置数据格式化器将数据转换为存储介质所需的格式。例如,将日期对象转换为数据库支持的日期格式、将数字对象转换为数据库支持的数字格式等。

  5. 响应数据格式化:在返回响应数据给客户端时,可以使用内置数据格式化器将数据格式化为指定的格式。例如,将日期对象格式化为指定的日期字符串格式、将数字对象格式化为指定的数字字符串格式等。

3. DateFormatter

DateFormatter 是 SpringMVC 内置的数据格式化器之一,用于将日期字符串转换为日期对象,或将日期对象格式化为指定的日期字符串格式。以下是 DateFormatter 的使用案例:

  1. 在 SpringMVC 的配置文件中配置 DateFormatter:
<bean id="dateFormatter" class="org.springframework.format.datetime.DateFormatter"><property name="pattern" value="yyyy-MM-dd" />
</bean>
  1. 在控制器中使用 DateFormatter:
@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));}@RequestMapping("/example")public String example(@RequestParam("date") Date date) {// 处理日期对象return "example";}
}

在上述示例中,配置了一个 DateFormatter 对象,并指定了日期格式为 “yyyy-MM-dd”。然后,在控制器的方法参数中使用了 @RequestParam 注解,将请求参数 “date” 自动转换为 Date 类型的对象。

通过这样的配置和使用,当请求中的 “date” 参数为符合指定格式的日期字符串时,SpringMVC 会自动将其转换为 Date 对象。反之,如果请求中的参数无法转换为 Date 对象,将会抛出异常或使用默认值。

4. NumberFormatter

NumberFormatter 是 SpringMVC 内置的数据格式化器之一,用于将数字字符串转换为数字对象,或将数字对象格式化为指定的数字字符串格式。以下是 NumberFormatter 的使用案例:

  1. 在 SpringMVC 的配置文件中配置 NumberFormatter:
<bean id="numberFormatter" class="org.springframework.format.number.NumberFormatter"><property name="pattern" value="#,##0.00" />
</bean>
  1. 在控制器中使用 NumberFormatter:
@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.addCustomFormatter(new NumberFormatter("#,##0.00"));}@RequestMapping("/example")public String example(@RequestParam("amount") BigDecimal amount) {// 处理金额对象return "example";}
}

在上述示例中,配置了一个 NumberFormatter 对象,并指定了数字格式为 “#,##0.00”。然后,在控制器的方法参数中使用了 @RequestParam 注解,将请求参数 “amount” 自动转换为 BigDecimal 类型的对象。

通过这样的配置和使用,当请求中的 “amount” 参数为符合指定格式的数字字符串时,SpringMVC 会自动将其转换为 BigDecimal 对象。反之,如果请求中的参数无法转换为 BigDecimal 对象,将会抛出异常或使用默认值。

5. CurrencyFormatter

CurrencyFormatter 是 SpringMVC 内置的数据格式化器之一,用于将数字对象格式化为指定的货币字符串格式。以下是 CurrencyFormatter 的使用案例:

  1. 在 SpringMVC 的配置文件中配置 CurrencyFormatter:
<bean id="currencyFormatter" class="org.springframework.format.number.CurrencyFormatter"><property name="currencyCode" value="USD" />
</bean>
  1. 在控制器中使用 CurrencyFormatter:
@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.addCustomFormatter(new CurrencyFormatter());}@RequestMapping("/example")public String example(@RequestParam("amount") BigDecimal amount) {// 处理金额对象return "example";}
}

在上述示例中,配置了一个 CurrencyFormatter 对象,并指定了货币代码为 “USD”(美元)。然后,在控制器的方法参数中使用了 @RequestParam 注解,将请求参数 “amount” 自动转换为 BigDecimal 类型的对象。

通过这样的配置和使用,当请求中的 “amount” 参数为数字时,SpringMVC 会自动将其格式化为指定货币格式的字符串。例如,将数字 1000 转换为 “$1,000.00”。

6. DateFormatterRegistrar

DateFormatterRegistrar 是 SpringMVC 内置的日期格式化注册器,用于注册自定义的日期格式化器。以下是 DateFormatterRegistrar 的使用案例:

  1. 创建自定义的日期格式化器:
public class CustomDateFormatter implements Formatter<Date> {private String pattern;public CustomDateFormatter(String pattern) {this.pattern = pattern;}@Overridepublic Date parse(String text, Locale locale) throws ParseException {SimpleDateFormat dateFormat = createDateFormat(locale);return dateFormat.parse(text);}@Overridepublic String print(Date date, Locale locale) {SimpleDateFormat dateFormat = createDateFormat(locale);return dateFormat.format(date);}private SimpleDateFormat createDateFormat(Locale locale) {SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, locale);dateFormat.setLenient(false);return dateFormat;}
}

在上述示例中,我们创建了一个自定义的日期格式化器 CustomDateFormatter,实现了 Formatter 接口,并重写了 parse() 和 print() 方法来进行日期的解析和格式化。

  1. 在 SpringMVC 的配置文件中配置 DateFormatterRegistrar:
<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="formatters"><set><bean class="com.example.CustomDateFormatter"><constructor-arg value="yyyy-MM-dd" /></bean></set></property>
</bean>

在上述示例中,我们使用 FormattingConversionServiceFactoryBean 配置了自定义的日期格式化器 CustomDateFormatter,并指定了日期格式为 “yyyy-MM-dd”。

通过这样的配置,SpringMVC 将会注册我们自定义的日期格式化器,并在需要进行日期格式化或解析的地方使用它。

7.FormattingConversionServiceFactoryBean

FormattingConversionServiceFactoryBean 是 SpringMVC 内置的数据格式化器注册器,用于配置和管理数据格式化器。以下是 FormattingConversionServiceFactoryBean 的使用案例:

  1. 在 SpringMVC 的配置文件中配置 FormattingConversionServiceFactoryBean:
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="formatters"><set><bean class="org.springframework.format.datetime.DateFormatter"><property name="pattern" value="yyyy-MM-dd" /></bean><bean class="org.springframework.format.number.NumberFormatter"><property name="pattern" value="#,##0.00" /></bean><!-- 添加其他的数据格式化器 --></set></property>
</bean>

在上述示例中,我们配置了一个 FormattingConversionServiceFactoryBean 对象,并在其中添加了内置的日期格式化器 DateFormatter 和数字格式化器 NumberFormatter。可以根据需要添加其他的数据格式化器。

  1. 在控制器中使用 FormattingConversionServiceFactoryBean:
@Controller
public class MyController {@Autowiredprivate FormattingConversionServiceFactoryBean conversionService;@InitBinderpublic void initBinder(WebDataBinder binder) {binder.setConversionService(conversionService.getObject());}@RequestMapping("/example")public String example(@RequestParam("date") Date date, @RequestParam("amount") BigDecimal amount) {// 处理日期对象和金额对象return "example";}
}

在上述示例中,我们注入了 FormattingConversionServiceFactoryBean 对象,并在控制器的 initBinder() 方法中将其设置为 WebDataBinder 的 ConversionService。这样,在控制器的方法参数中使用了 @RequestParam 注解时,SpringMVC 会自动使用配置的数据格式化器进行参数的转换和格式化。

通过这样的配置和使用,我们可以方便地管理和使用多个数据格式化器,以满足不同类型的数据格式化需求。

8. 自定义格式化器

SpringMVC 提供了自定义格式化器的功能,可以根据特定的需求创建自定义的格式化器。以下是 SpringMVC 自定义格式化器的代码案例:

  1. 创建自定义格式化器:
public class CustomFormatter implements Formatter<CustomObject> {@Overridepublic CustomObject parse(String text, Locale locale) throws ParseException {// 解析字符串并返回自定义对象CustomObject customObject = new CustomObject();// 解析逻辑...return customObject;}@Overridepublic String print(CustomObject customObject, Locale locale) {// 将自定义对象格式化为字符串String formattedString = "";// 格式化逻辑...return formattedString;}
}

在上述示例中,我们创建了一个自定义的格式化器 CustomFormatter,实现了 Formatter 接口,并重写了 parse() 和 print() 方法来进行格式化和解析。

  1. 注册自定义格式化器:
<mvc:annotation-driven conversion-service="conversionService" /><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="formatters"><set><bean class="com.example.CustomFormatter" /></set></property>
</bean>

在 SpringMVC 的配置文件中,我们使用 <mvc:annotation-driven> 标签启用注解驱动的数据格式化支持,并配置了一个 FormattingConversionServiceFactoryBean 对象。在该对象中,我们将自定义的格式化器 CustomFormatter 添加到 formatters 集合中。

通过这样的配置,SpringMVC 将会注册我们自定义的格式化器,并在需要进行格式化或解析的地方使用它。

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

在这里插入图片描述

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

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

相关文章

小红书口碑营销技巧有哪些,打造独特品牌内容

作为一款社交电商平台&#xff0c;从目前来看&#xff0c;其实小红书也算是比较不错的口碑营销传播平台了。今天就来带大家一起分享下&#xff0c;小红书口碑营销技巧有哪些&#xff0c;打造独特品牌内容&#xff01; ​ 一、小红书口碑营销怎么做 1. 了解目标用户 首先需要明…

nginx代理webSocket链接,webSocket频繁断开重连

一、场景 1、使用nginx代理webSocket链接&#xff0c;消息发送和接收都是正常的&#xff0c;但webSocket链接会频繁断开重连 2、如果不使用nginx代理则一切正常 3、程序没有做webSocket心跳处理 如下图 二、nginx代理配置 upstream cloud_ass {#ip_hash;server 192.168.1.…

前端如何走通后端接口

0 写在前面 现在基本都是前后端分离的项目了&#xff0c;那么前端小伙伴如何获取后端小伙伴接口呢&#xff1f; 1 条件 同一WiFi下&#xff0c;让后端小伙伴分享出自己的ip地址&#xff1a; 步骤1:winr调出运行界面 步骤2&#xff1a;cmd调出命令行窗口 步骤3&#xff1a;…

C#,《小白学程序》第三课:类、类数组与排序

1 文本格式 /// <summary> /// 同学信息类 /// </summary> public class Classmate { /// <summary> /// 学号 /// </summary> public int Id; /// <summary> /// 姓名 /// </summary> public string Nam…

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统&#xff0c;它还缺少合适的动态分析接口。因此&#xff0c;在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架&#xff0c;无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

【C++】初始化列表

前言&#xff1a;这个知识点的细节比较多&#xff0c;且有些细节不太容易理解&#xff0c;要做好准备哟&#x1f47b; Ⅰ.构造函数的不完美&#x1f62d; 初始化列表&#xff0c;顾名思义&#xff0c;用列表一样的格式将其初始化。 &#x1f914;奇怪啊&#xff0c;构造函数的…

【Ubuntu 20.04 安装 搜狗输入法】细节注意

建议下载地址为&#xff1a; 搜狗拼音下载地址-Linux 也即是这个主页&#xff1a;适配Ubuntu20.04 安装过程根据官方文档即可 即 官方安装文档 一般不会出错

Vue2向Vue3过度Vuex状态管理工具快速入门

目录 1 Vuex概述1.是什么2.使用场景3.优势4.注意&#xff1a; 2 需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 3 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例…

IDEA下SpringBoot指定环境、配置文件启动

1、idea下的SpringBoot启动&#xff1a;指定配置文件 Springboot项目有如下配置文件 主配置文件application.yml&#xff0c; 测试环境&#xff1a;application-test.yml 生产环境&#xff1a;application-pro.yml 开发环境&#xff1a;application-dev.yml 1.1.配置文件…

windows下如何搭建属于自己的git服务器

前一阵子公司需要&#xff0c;领导让我给我们技术部搭建一个git服务器。以前看过教程&#xff0c;但自己没动手做过&#xff0c;开始按照网上的教程来&#xff0c;但搭建过程中发现还是不够详细&#xff0c;今天给大家一个比较详细的&#xff0c;希望对大家有帮助。 高能预警&a…

【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

最近一个项目要编译深度学习的库&#xff0c;需要用到 opencv 和 JNI&#xff0c;本文档用于记录环境配置中遇到的常见错误以及解决方案 Invalid Gradle JDK configuration found failed Invalid Gradle JDK configuration foundInvalid Gradle JDK configuration found. Open…

工业RFID在智能半导体领域的创新驱动!

在当今科技飞速发展的时代&#xff0c;半导体工业作为先锋领域&#xff0c;正不断追求更高的生产效率和产品质量。在这一挑战背后&#xff0c;RFID技术应运而生&#xff0c;为生产过程追踪和控制&#xff0c;以及在线检测和质量管理带来了前所未有的创新。通过其独特的优势&…