`

SpringMVC自定义时间类型转换

阅读更多

springmvc中Controller在接收前端传递参数的时候

public Map<String ,String> save(T bean)

 

 我们一般是这样来定义接收的bean对象,其中bean对象中的时间类型,我们会定义为Date,

那么在前端进行参数传递的时候,前端传递的时间如:2017-01-18是一个字符串和我们bean对象不匹配,那么就需要进行转换。

现在我这里定义了一个

@Controller
@RequestMapping(value = "/base")
public abstract class BaseController<T>

 

BaseController为Controller继承的一个父类来统一处理

    代码如下:

 @InitBinder
protected void initBinder(WebDataBinder binder) {

        //自定义全局时间接收转换处理
binder.registerCustomEditor(Date.class, new DateEditor());

//        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
//            @Override
//            public void setAsText(String value) {
//                 setValue(new Date(Long.valueOf(value)));
//            }
//        });

}

   其中注释掉部分为传统写法,我这里,自定义了一个类型来接处理时间类型

   自定义类:DateEditor

  

package org.moon.framework.util.date;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;

import java.util.Date;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.moon.framework.util.exception.FrameworkException;
import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


/**
 * 自定义SpringMVC 时间格式转义
 */
public class DateEditor extends PropertyEditorSupport {

    protected Logger logger = LoggerFactory.getLogger(this.getClass());
    /**

     * Parse the Date from the given text, using the specified DateFormat.

     */
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        try {
            // Treat empty String as null value.
            if (StringUtils.isBlank(text)) {
                setValue(null);
                return;
            }
            //如果时间类型值为直接是数字的情况  12位数字
            if(text.matches("^[0-9]{12}.*")) {
                Date date  = new Date(Long.valueOf(text));
                setValue(date);
            } else {
                setValue(this.dateAdapter(text));
            }
        } catch (FrameworkException ex) {
            ex.printStackTrace();
            logger.error("时间类型转换出错....:"+ex.getMessage());
        }
    }

    /**

     * Format the Date as String, using the specified DateFormat.

     */
    @Override
    public String getAsText() {
        Date value = (Date) getValue();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return (value != null ? dateFormat.format(value) : "");

    }



    public static Date dateAdapter(String dateStr) throws FrameworkException {
        Date date = null;
        String temp=dateStr;//缓存原始数据
        if(dateStr.contains("CST")){
            date = new Date(dateStr);
            return date;
        }
        if(StringUtils.isBlank(dateStr)){
            return date;
        }
        dateStr = dateStr.replace("年", "-").replace("月", "-").replace("日", "").replaceAll("/", "-").replaceAll("\\.", "-").trim();
        String fm="";
        //确定日期格式
        if(Pattern.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}.*").matcher(dateStr).matches()){
            fm = "yyyy-MM-dd";
        } else if(Pattern.compile("^[0-9]{4}-[0-9]{1}-[0-9]+.*||^[0-9]{4}-[0-9]+-[0-9]{1}.*").matcher(dateStr).matches()){
            fm = "yyyy-M-d";
        } else if(Pattern.compile("^[0-9]{2}-[0-9]{2}-[0-9]{2}.*").matcher(dateStr).matches()){
            fm = "yy-MM-dd";
        } else if(Pattern.compile("^[0-9]{2}-[0-9]{1}-[0-9]+.*||^[0-9]{2}-[0-9]+-[0-9]{1}.*").matcher(dateStr).matches()){
            fm = "yy-M-d";
        }
        //确定时间格式
        if(Pattern.compile(".*[ ][0-9]{2}").matcher(dateStr).matches()){
            fm+= " HH";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}").matcher(dateStr).matches()){
            fm+= " HH:mm";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}:[0-9]{2}").matcher(dateStr).matches()){
            fm+= " HH:mm:ss";
        }else if(Pattern.compile(".*[ ][0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{0,3}").matcher(dateStr).matches()){
            fm+= " HH:mm:ss:sss";
        }
        if(StringUtils.isNotBlank(fm)){
            date = DateUtilServer.stringToDate(dateStr,fm);
        }
        return date;
    }

}

  其中if(text.matches("^[0-9]{12}.*"))是对使用hibernate时间类型为乐观锁的处理

 希望能够帮助到你们 

 

分享到:
评论

相关推荐

    SpringMVC自定义类型转换器实现解析

    主要介绍了SpringMVC自定义类型转换器实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    SpringMVC自定义多视图

    SpringMVC自定义多视图,多视图实现

    SpringMVC实现自定义类型转换器

    本篇文章主要介绍了SpringMVC实现自定义类型转换器 ,详细的介绍了自定义类型转换器的用法和好处,有兴趣的可以了解一下。

    Springmvc自定义类型转换器实现步骤

    主要介绍了Springmvc自定义类型转换器实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    springmvc实现自定义类型转换器示例

    本篇文章主要介绍了springmvc实现自定义类型转换器示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    SpringMVC中午+自定义转换器-2021-04-10.txt

    在进行web项目的开发时,如果时间让用户自己输入,该怎么处理,SpringMVC的转换器可以处理,但是需要自己定义,如何定义和搭配呢?

    Springmvc自定义参数转换实现代码解析

    主要介绍了Springmvc自定义参数转换实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring MVC自定义日期类型转换器实例详解

    主要介绍了Spring MVC自定义日期类型转换器实例详解的相关资料,需要的朋友可以参考下

    SSM笔记-自定义类型转换器

    SSM笔记-自定义类型转换器,配置之后就能对指定的Bean的类型转换起到统一作用,凡是有关该bean的类型转换都会调用对应的类型转换类,这样能简化类型转换方面的代码

    详解自定义SpringMVC的Http信息转换器的使用

    主要介绍了详解自定义SpringMVC的Http信息转换器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    吴天雄--SpringMVC笔记.doc

    属性格式、集合类型)、自定义类型转换器、常用注解);第二天(跳转方式(forward、redirect)、@ResponseBody、SpringMVC作用域传值的方式、文件上传、文件下载、跨服务器上传);第三天(SpringMVC异常处理、...

    springmvc思维导图

    springmvc的概念、springmvc的运行原理(前端控制器、处理器映射器、处理器适配器、处理器、视图解析器)、同步请求的方式(ModelAndView、String、无返回值、默认的绑定值)、异步请求的注解、请求参数的封装(简单...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    整合FastJson对指定http类型的数据进行转换 整合hibernate.validator校验器对controller接口参数进行校验 使用了springmvc统一异常处理 使用了FormattingConversionServiceFactoryBean对于传入参数中日期或数字字符...

    SpringMVC示例

    员工信息、RESTRUL_CRUD_添加操作&表单标签、RESTRUL_CRUD_删除操作&处理静态资源、RESTRUL_CRUD_修改操作、自定义类型转换器、annotation-driven配置、InitBinder注解、数据的格式化、JSR 303数据校验、错误消息的...

    JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    本篇文章主要介绍了SpringMVC的相关知识。同时也会介绍到js、css这些静态文件的加载配置,以及服务器推送的两种实现方式并且给出了两者的区别。下面跟着小编一起来看下吧

    SpringMVC第一天学习代码

    这是SpringMVC第一天的学习代码,包含SpringMVC的入门案例、请求参数的各种绑定,以及中文乱码的解决还有自定义类型转换器的定义

    ssm_springmvc_canshu

    由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级...

    SpringMVC Employee Demo

    controller标签转换成注解、自定义视图、重定向、Employee管理RESTRUL_CRUD_显示所有员工信息、RESTRUL_CRUD_添加操作&表单标签、RESTRUL_CRUD_删除操作&处理静态资源、RESTRUL_CRUD_修改操作、自定义类型转换器、...

    SpringMVC【入门】篇

    SSM三部曲: 如果你读完这篇文章,恭喜你!...自定义类型转换器代码编写细节:怎么通过SpringMVC获取Servlet原生API常用注解?==@RequestParam()====@RequestBody()====@PathVariable()====HiddenHttpM

Global site tag (gtag.js) - Google Analytics