zoukankan      html  css  js  c++  java
  • SpringMVC使用@ResponseBody时返回json的日期格式及可能产生的问题

    http://blog.csdn.net/z69183787/article/details/40375831

    遇到的问题:

    1 条件:

    1.1、表单里有两个时间参数,都是作为隐藏项随表单一起提交:

    <input name="createTime" id="createTime" type="hidden" />
    <input name="lastTime" id="lastTime" type="hidden" />

    1.2、在表单对应的model类User中,对createTime使用了时间格式转换,对lastTime没有使用。

    @JsonSerialize(using = CustomDateSerializer.class) 
    public Date getCreateTime() {
    return createTime;
    }
    
    public Date getLastTime() {
    return lastTime;
    }

    2 产生问题:在使用jQuery提交表单时,无法提交到后台controller。

    $(function() {
    $("#form").form({
    url :"${pageContext.request.contextPath}/systemManage/saveUser",
    onSubmit : function() {
    parent.$.messager.progress({
    title : '提示',
    text : '数据处理中,请稍后....'
    });
    var isValid = $(this).form('validate');
    if (!isValid) {
    parent.$.messager.progress('close');
    }
    return isValid;
    },
    success : function(result) {
    parent.$.messager.progress('close');
    result = $.parseJSON(result);
    if (result.status) {
    parent.reload;
    parent.$.modalDialog.openner.datagrid('reload');
    parent.$.modalDialog.handler.dialog('close');
    parent.$.messager.show({
    title : result.title,
    msg : result.message,
    timeout : 1000 * 2
    });
    }else{
    parent.$.messager.show({
    title : result.title,
    msg : result.message,
    timeout : 1000 * 2
    });
    }
    }
    });
    });

    在/systemManage/saveUser对应controller方法中打断点无法走入,即无法触发controller方法,但奇怪的是,我的集成了HandlerInterceptorAdapter的拦截器可拦截到url。随后js进入success分支。

    3 调查问题,

    3.1 发现形如下列的表单项可以提交表单

    <input name="createTime" id="createTime" type="hidden" value="2016-06-21 17:24:19">
    
    <input name="lastTime" id="lastTime" type="hidden" value="">

    3.2 而形如下列的表单无法提交

    <input name="createTime" id="createTime" type="hidden" value="2016-06-21 17:24:19">
    
    <input name="lastTime" id="lastTime" type="hidden" value="14363774849">

    3.3 怀疑是lastTime的提交导致的问题,尝试将getLastTime加上时间格式,问题解决。理由不清楚。

    @JsonSerialize(using = CustomDateSerializer.class) 
    
    public Date getLastTime() {
    return lastTime;
    }

     3.4 后记,将日期类型的input都使用@JsonSerialize修改日期格式以后,表单彻底无法提交了,3.1中描述的现象也无法重现。

    或许是我使用了jquery.easyui.min.js的表单提交函数.form。

    <script type="text/javascript">
        $(function() {
            $("#form").form({
                url : "${pageContext.request.contextPath}/systemManage/saveUser",
                onSubmit : function() {
                    parent.$.messager.progress({
                        title : '提示',
                        text : '数据处理中,请稍后....'
                    });
                    var isValid = $(this).form('validate');
                    if (!isValid) {
                        parent.$.messager.progress('close');
                    }
                    return isValid;
                },
                success : function(result) {
                    parent.$.messager.progress('close');
                    result = $.parseJSON(result);
                    if (result.status) {
                        parent.reload;
                        parent.$.modalDialog.openner.datagrid('reload');
                        parent.$.modalDialog.handler.dialog('close');
                        parent.$.messager.show({
                            title : result.title,
                            msg : result.message,
                            timeout : 1000 * 2
                        });
                    } else {
                        parent.$.messager.show({
                            title : result.title,
                            msg : result.message,
                            timeout : 1000 * 2
                        });
                    }
                }
            });
        });
    </script>

    所谓的表单无法提交的具体表现是,onSubmit执行以后,无法触发url指定的后台程序,程序直接走进success分支中,如果将result参数打印出来会发现,这是个400出错界面,

    出错信息的大概意思是,js在组织request的时候出错,所以肯定无法触发后台程序了。

    解决的办法就是删除表单中的日期类型的input,彻底解决的办法还未找到。

  • 相关阅读:
    protobufer安装
    flume sink processor
    flume 参考
    uniq 和 sort -u的不同
    XtraInputBox-How to set the XtraInputBox as password input?
    原型模式
    C#-IEditableObject Interface
    gridControl-The BindingSource.AddingNew event does not fire until I begin typing into the new row
    C#中Invoke 和 BeginInvoke 的区别
    C#启动时全屏显示窗体...
  • 原文地址:https://www.cnblogs.com/mabaishui/p/5604444.html
Copyright © 2011-2022 走看看