SpringMVC处理表单日期数据转换异常(Date)使用@InitBinder

本文主要是介绍SpringMVC处理表单日期数据转换异常(Date)使用@InitBinder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:@ControllerAdvice注解添加一个类:


package cn.temptation.web;import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;import java.text.SimpleDateFormat;
import java.util.Date;/**
 * @Author:Starry
 * @Description:处理表单数据转换对象异常(Date)
 * @Date:Created in 14:45 2018/3/15
 * Modified By:
 */
@ControllerAdvice
public class AppControllerAdvice {@InitBinder
    public void initBinder(WebDataBinder binder){/*以下方法二选一,第一个无需添加MulitFormatDateEditor这个类*/

        //方法1:支持一个日期格式
        binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));  //方法2:支持两个日期格式
        //true 允许属性为空verficationController
        binder.registerCustomEditor(Date.class,new MulitFormatDateEditor(new SimpleDateFormat("yyyy-MM-dd"),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),true));}

}

2:创建一个继承自PropertyEditorSupport的类MulitFormatDateEditor


package cn.temptation.web;import org.springframework.util.StringUtils;import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;/**
 * @Author:Starry
 * @Description:支持两个日期格式的转换,springmvc自带的转换器仅支持一种格式
 * @Description:日期转换为String时默认使用dateFormat2格式
 * @Date:Created in 14:49 2018/3/15
 * Modified By:
 */
public class MulitFormatDateEditor extends PropertyEditorSupport{//日期格式1
    private final DateFormat dateFormat;//日期格式2
    private final DateFormat dateFormat2;//是否允许为空
    private final boolean allowEmpty;//日期长度
    private final int exactDateLength;public MulitFormatDateEditor(DateFormat dateFormat, DateFormat dateFormat2, boolean allowEmpty) {this.dateFormat = dateFormat;this.dateFormat2 = dateFormat2;this.allowEmpty = allowEmpty;this.exactDateLength = -1;}public MulitFormatDateEditor(DateFormat dateFormat, DateFormat dateFormat2, boolean allowEmpty, int exactDateLength) {this.dateFormat = dateFormat;this.dateFormat2 = dateFormat2;this.allowEmpty = allowEmpty;this.exactDateLength = exactDateLength;}/*
    * 使用指定的日期格式,解析给定文本的日期。
    * */
    @Override
    public void setAsText(String text) throws IllegalArgumentException {if(this.allowEmpty && StringUtils.hasText(text)){setValue(null);}else if(text != null && this.exactDateLength >= 0 && text.length() != this.exactDateLength){throw new IllegalArgumentException("不能解析这个日期,长度为:"+this.exactDateLength);}else{try {if(text != null){setValue(this.dateFormat.parse(text));}}catch (ParseException ex){try {if(text != null){setValue(this.dateFormat2.parse(text));}}catch (ParseException ex2){throw new IllegalArgumentException("不能解析这个日期"+ex.getMessage(),ex);}}}}/**
     * 将日期格式化为字符串,使用指定的日期格式。
     */
    @Override
    public String getAsText() {Date value = (Date)getValue();return (value != null ? this.dateFormat2.format(value):"");}}
 


3:然后就可以了,每天进步一点点 Starry❤

这篇关于SpringMVC处理表单日期数据转换异常(Date)使用@InitBinder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668257

相关文章

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝