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

Spring MVC 中日期格式转换的两种实用方法

在开发基于 Spring MVC 的 Web 应用时,日期格式的转换是一个常见的需求。用户在表单中输入的日期通常是字符串类型,而在 Java 代码中我们往往需要将其转换为 Date 类型进行处理。本文将详细介绍 Spring MVC 中两种日期格式转换的方法,包括创建过程和最终的运行结果。

方法一:使用 @DateTimeFormat 注解

1. 原理

@DateTimeFormat 注解是 Spring 框架提供的一个便捷注解,用于将字符串类型的日期转换为 Date 类型。它可以直接应用在实体类的日期属性上,Spring MVC 在接收到请求参数时会自动根据注解中指定的格式进行转换。

2. 创建过程

2.1 实体类添加注解

在 User 类的 birthday 属性上添加 @DateTimeFormat 注解,指定日期格式。示例代码如下:

package cn.tx.demo2;import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;public class User implements Serializable {// ... 其他属性 ...@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date birthday;// ... 其他方法 ...
}
2.2 控制器接收参数

在控制器中,当接收到包含日期参数的请求时,Spring MVC 会自动将字符串日期转换为 Date 类型。示例代码如下:

package cn.tx.demo2;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save2.do")public String save2(User user) {System.out.println("USER:" + user);return "suc";}
}

 3.运行结果:

使用原来日期格式:

报错:因为日期格式改了 

 改成现在的格式:

成功:

 

方法二:自定义转换器 StringToDate

1. 原理

自定义转换器可以实现更复杂的日期格式转换逻辑。通过实现 org.springframework.core.convert.converter.Converter 接口,我们可以自定义字符串到 Date 类型的转换规则。

2. 创建过程

2.1 创建自定义转换器类

创建一个实现 Converter<String, Date> 接口的类,实现 convert 方法,用于将字符串类型的日期转换为 Date 类型。示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 启用注解驱动 --><mvc:annotation-driven/><!-- 配置组件扫描 --><context:component-scan base-package="cn.tx.demo1"/><context:component-scan base-package="cn.tx.demo2"/><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="cn.tx.demo2.StringToDate" /></set></property></bean><!--让映射器、适配器和处理器生效(默认不配置也是可以的)--><mvc:annotation-driven conversion-service="conversionService"/>
</beans>

2.3 控制器接收参数

在控制器中,同样可以正常接收包含日期参数的请求,Spring MVC 会使用自定义的转换器进行日期转换。示例代码如下:

package cn.tx.demo2;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save3.do")public String save3(User user) {System.out.println("user:" + user);return "suc";}
}

  3. 运行结果

当用户提交包含日期参数的表单时,Spring MVC 会使用自定义的转换器将字符串日期按照指定的格式转换为 Date 类型,并赋值给 User 对象的 birthday 属性。在控制器中可以直接使用该 Date 对象进行后续处理。

总结

  • @DateTimeFormat 注解适用于简单的日期格式转换,使用方便,只需要在实体类属性上添加注解即可。
  • 自定义转换器适用于需要更复杂转换逻辑的场景,可以根据实际需求自定义转换规则。

通过以上两种方法,我们可以在 Spring MVC 中轻松实现日期格式的转换,提高开发效率。希望本文对你有所帮助!

http://www.xdnf.cn/news/14186.html

相关文章:

  • Hive 性能优化:从表设计到查询执行的全链路优化
  • rust的main.rs和lib.rs该怎么写
  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 【Qt】QStateMachine状态机-对状态机分组、历史状态,实现复杂状态机
  • 玩转Docker | 使用Docker部署Blinko个人笔记工具
  • 如何在FastAPI中构建一个既安全又灵活的多层级权限系统?
  • 刚学到一个使用共享软件而禁用弹窗的工具:微软电脑管家
  • 如何给Hexo-butterfly主题博客在复制时添加版权声明
  • 【图片转 3D 模型】北大·字节跳动·CMU携手——单图15 秒生成结构化3D模型!
  • 创客匠人视角:从外卖大战看创始人IP的差异化定位逻辑
  • veyon(电子教室管理) v4.9.6.1 官方版
  • n8n 从 Docker 到 Node.js 本地环境迁移指南
  • Linux Docker的环境配置与简单使用
  • 《高并发系统性能优化三板斧:缓存 + 异步 + 限流》
  • Spring Boot 自动配置原理深度解析与自定义 Starter 实战
  • 【Unity】MiniGame编辑器小游戏(一)俄罗斯方块【Tetris】
  • [学习] 牛顿迭代法:从数学原理到实战
  • Nginx、CDN、 DNS的关系解析
  • ​​信息系统项目管理师-信息系统工程 知识点总结与例题分析​​
  • 单项链表的操作及其实现
  • 重定向与缓冲区:C语言IO的奥秘(模拟封装glibc)
  • 工业PID算法在温控器的应用与参数说明
  • 《单调队列》题集
  • list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘
  • Windows10电脑开始菜单快速查找应用程序
  • I/O模式之epoll,本文会讲到epoll的相关接口以及底层,还会涉及水平和边缘工作模式,以及通过epoll相关接口实现一个水平工作模式服务端
  • 【DRL】强化学习中的概念和术语
  • 用数学融智学人力资源模型的核心架构:建立可量化的理论框架
  • openMP的简单介绍以及c++执行实例
  • JS递归了解