spring框架传2019-01-01格式,后台用Date类型接收时错误问题

spring框架传2019-01-01格式,后台用Date类型接收时错误问题

spring原来传2019/01/01格式的时间,能够正常接收。

如果传参时需要同这种格式:2019-01-01;可以重写重写spring日期转换器。

解决办法:

1、重写spring日期转换器

package com.test.core.customDateEditor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;
/**
 * 重写spring日期转换器,自定义日期转换器
 * 解决spring接收date类型参数的问题
 *
 */
public class MyCustomDateEditor 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 {

        if (!StringUtils.hasText(text)) {

            // Treat empty String as null value.

            setValue(null);

        }

        else {

            try {

                setValue(this.dateAdapter(text));

            }

            catch (Exception 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) : "");

    }

    /**
     * 
     * 字符串转日期适配方法
     * 
     * @param dateStr
     *            日期字符串
     * 
     * @throws FrameworkException
     */

    public static Date dateAdapter(String dateStr) throws Exception {

        Date date = null;

        String temp = dateStr;// 缓存原始数据

        if (!(null == dateStr || "".equals(dateStr))) {

            // 判断是不是日期字符串,如Wed May 28 08:00:00 CST 2014

            if (dateStr.contains("CST")) {
                date = new Date(dateStr);
            } else {
                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 (!"".equals(fm)) {

                    try {

                        date = new SimpleDateFormat(fm).parse(dateStr);

                    } catch (ParseException e) {

                        throw new Exception("参数字符串" + dateStr + "无法被转换为日期格式!");

                    }

                }

            }

        }

        return date;

    }
}

2、创建BaseController类

package com.tianque.core.base;

import com.tianque.core.customDateEditor.MyCustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import java.util.Date;

public class BaseController {
    // WebDataBinder实现将请求request绑定到复杂属性时的请求字符string到属性的转换 
    @InitBinder    
    public void initBinder(WebDataBinder binder) {    

        binder.registerCustomEditor(Date.class, new MyCustomDateEditor());
    }  
}

3、需要有Date类型的接收参数的,可以继承BaseAction

package com.tianque.core.test.action;

import com.tianque.core.base;
import java.util.Date;
import org.springframework.stereotype.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping(value = "/test")
@RestController
public class TestController extends BaseController{
    
    @RequestMapping(value = "test", method = RequestMethod.POST)
    @ResponseBody
    public String test(Date date) {
        // TODO
    } 
}

这样时间传 2019-01-01 的时候,就可以接收到了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容