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

news2024/11/25 20:22:20

在这里插入图片描述

👉博主介绍: 博主从事应用安全和大数据领域,有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 {

    @InitBinder
    public 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 {

    @InitBinder
    public 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 {

    @InitBinder
    public 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;
    }

    @Override
    public Date parse(String text, Locale locale) throws ParseException {
        SimpleDateFormat dateFormat = createDateFormat(locale);
        return dateFormat.parse(text);
    }

    @Override
    public 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 {

    @Autowired
    private FormattingConversionServiceFactoryBean conversionService;

    @InitBinder
    public 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> {

    @Override
    public CustomObject parse(String text, Locale locale) throws ParseException {
        // 解析字符串并返回自定义对象
        CustomObject customObject = new CustomObject();
        // 解析逻辑...
        return customObject;
    }

    @Override
    public 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.coloradmin.cn/o/939094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕设 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目&#xff0c;二维码 / 条形码检测与识别 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 1 二维码检测 物体检…

WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

WordPress主题Zing V2.2.1&#xff0c;模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局&#xff0c;支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、关键字和描述 速度优化…

ios ipa包上传需要什么工具

目录 ios ipa包上传需要什么工具 前言 一、IPA包的原理 二、IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iT…

高忆管理:美股盘中狂泻600点,美联储释放重磅信号!

隔夜美股商场&#xff0c;上演大跳水。 当地时间8月24日&#xff0c;美股三大指数团体大跳水&#xff0c;道指跌1.08%&#xff0c;纳指大跌1.87%&#xff0c;标普500指数跌1.35%。标普、纳指均创惠誉下调美国主权评级以来最差单日体现&#xff0c;道指盘中由最高34694点跌到了…

freertos之队列集

队列集就是队列的集合 队列集的长度所包含队列的长度之和 实验 创建两个队列和一个队列集&#xff0c;并把队列添加到队列集&#xff0c;创建3个任务&#xff0c;其中两个任务往队列存数据&#xff0c;另一个任务通过队列集来获取数据。 实验结果&#xff1a;

星云日记是什么?流量共享模式特点

星云日记是什么&#xff1f;流量共享&#xff0c;一键解决卖货难题 星云日记,即将来袭,竞拍抢购模式,一键转卖,24小时转卖成功 顾客共享&#xff0c;资源共享&#xff0c;利润共享无需找顾客&#xff0c;一键转卖24H结算&#xff0c;别光盯着大饼&#xff0c;先解决生活问题。…

微信签到抽奖活动策划指南,打造成功的营销活动

在如今竞争激烈的市场环境下&#xff0c;吸引用户参与活动成为了企业吸粉、增加品牌知名度的重要手段之一。签到抽奖活动作为一种简单而又有趣的方式&#xff0c;能够吸引更多用户的参与。那么&#xff0c;制作一个吸引人的签到抽奖活动需要几个步骤呢&#xff1f;下面我们一起…

聚观早报|闻泰科技上半年净利润12.58亿;馥逸医疗完成A轮融资

【聚观365】8月27日消息 闻泰科技2023上半年净利润12.58亿 馥逸医疗完成A轮融资 东方甄选转型直播电商成功 AI牙齿美白公司白里挑一完成千万元天使轮融资 特斯拉新款Model 3全面升级 闻泰科技上半年净利润12.58亿 闻泰科技发布2023年半年报。报告期内&#xff0c;闻泰科技…

img引入的svg图片,悬浮时怎么修改颜色?

实现效果&#xff1a;鼠标悬浮在这一行&#xff0c;让这行的文字和svg图片颜色发生变化。 因为是用img标签引入页面&#xff0c;使用fill属性是无效的。 css核心代码&#xff1a; &:active,&:hover {transform: scale(0.98);img{filter: drop-shadow(#409eff 50px 0);…

如何在一个有500台PC以上的局域网配置IP、子网掩码

上午好&#xff0c;我的网工朋友。 IP地址是一种在Internet上的给主机编址的方式&#xff0c;它是IP协议提供的一种统一的地址格式。 它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。 现在是互联网大行的时代&#xff0c;所以…

网络中的问题2

距离-向量算法的具体实现 每个routerY的路由表表项 involve<目的网络N&#xff0c;距离d&#xff0c;下一跳X> 对邻居X发来的报文,先把下一跳改为X,再把距离1,if original route table doesn’t involve N,add this item&#xff1b; else if original table’s relate…

No121.精选前端面试题,享受每天的挑战和学习

文章目录 1、flex布局2、position定位&#xff1a;fixed、relative和absoluted区别3、js数据类型&#xff0c;Symbol是什么、有什么用4、ES6新增哪些API5、TCP四次挥手6、localStorage和sessionStorage&#xff0c;存储大小7、跨域怎么解决&#xff08;开发环境和生成环境&…

开学数码产品必备好物,有什么值得买的数码产品推荐?

​又准备到了新学期开学季&#xff0c;很多新生都会选择在这个时候购买新装备。不过&#xff0c;种类繁多的数码产品很容易让人挑花了眼。今天来分享几款非常实用的数码好物给大家&#xff0c;让你的新学期焕然一新&#xff01; Top1&#xff1a;南卡00压蓝牙耳机 数码产品绝对…

灵明光子正式发布超高分辨率纯固态激光雷达SPAD芯片ADS6311

SPADIS面阵型ADS6311芯片 广泛适用于车载、机器人等纯固态激光雷达领域 作为SPAD dToF行业的一家领军级企业,灵明光子在2023年迎来了众多里程碑式的突破,获得包括成功通过AEC-Q102 Grade 1车规级认证,完成混合固态激光雷达接收端的SiPM芯片产能爬坡和量产出货,被国家工信部…

十人拼购消费全返,全民拼购模式

传统的消费模式已经满足不了消费者们的消费心理&#xff0c;企业要去琢磨大众的消费心理&#xff0c;对于消费者来说&#xff0c;实际性的购物是必须的&#xff0c;但是平台商家吸引的亮点莫过于就是消费返利&#xff0c;不少商城平台包括店面都存在这种消费返利的形式&#xf…

在 Python 中构建卷积神经网络; 从 0 到 9 的手绘数字的灰度图像预测数字

一、说明 为了预测从0到9的数字&#xff0c;我选择了一个基于著名的Kaggle的MNIST数据集的数据集。数据集包含从 <0> 到 <9> 的手绘图数字的灰度图像。在本文中&#xff0c;我将根据像素数据&#xff08;即数值数据&#xff09;和卷积神经网络预测数字。 二、 卷积…

储能辅助电力系统调峰的容量需求研究(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《储能辅助电力系统调峰的容量需求研究》&#xff0c;是一个很常规很经典的matlab优化代码&#xff0c;主要是对火电、风电和储能等电力设备主体进行优化调度&#xff0c;在调峰能力达不到时采…

一文便知 GO 中mongodb 的安装与使用

MONGDB 安装与使用 咱们来回顾一下上次分享的内容&#xff1a; 如何使用log 包log 包原理和具体实现自定义日志 要是对 GO 的日志包还有点兴趣的话&#xff0c;可以查看文章 GO的日志怎么玩 ? 今天咱们来玩个简单的 mongodb 的安装和使用 MONGODB介绍 MongoDB 是一个基于…

百度文库系统PPT docx pdf文档转换系统在线预览知识付费程序源码 二次开发

基于PHPMYSQL开发的适用于多平台的文档管理系统&#xff0c;支持doc、ppt、excel、pdf、压缩包、图片、音视频 等资源的在线预览和下载&#xff0c;响应速度更快速对SEO更友好&#xff0c;收录更快、排名更强&#xff0c;内置文章、问题、广告管理、TAG标签、内部链接等多个运营…

解决ubuntu文件系统变成只读的方法

所欲文件变成只读&#xff0c;这种情况一般是程序执行发生错误&#xff0c;磁盘的一种保护措施 使用fsck修复 方法一&#xff1a; # 切换root sudo su # 修复磁盘错误 fsck -t ext4 -v /dev/sdb6 方法二&#xff1a; fsck.ext4 -y /dev/sdb6 重新用读写挂载 上面两种方法&…