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,彻底解决的办法还未找到。