今天遇到ajax传输日期參数后台无法识别的问题,错误异常例如以下。

从异常中能够看出传输到后台的日期数据格式为Thu Aug 13 2015 19:45:20 GMT+0800 (中国标准时间),这样的格式的日期数据格式服务端无法解析。

Caused by: java.lang.IllegalArgumentException: Could not parse date: Unparseable date: "Mon Aug 17 2015 12:00:40 GMT+0800 (中国标准时间)"
at org.springframework.beans.propertyeditors.CustomDateEditor.setAsText(CustomDateEditor.java:111) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:449) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:422) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:107) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64) ~[spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
... 39 common frames omitted

浏览器端的ajax请求

$.ajax({
url: './test/ajax.do',
data: {
start: new Date(),
end: new Date()
},
dataType: 'json',
type: 'post'
}).done(function(json){
console.dir(json);
});

浏览器提交的日期数据格式

从图片上能够看到日期參数在提交的时候。已经用JavaScript默认的toString()方法转为字符串格式。

那么,ajax怎样传输日期格式数据或者其它复杂类型数据?要解决问题就必须了解ajax支持传输什么类型的数据。

事实上ajax发送请求參数和接收server端返回的数据都是文本数据,ajax不支持二进制传输数据。所以ajax在传输參数的时候,会调用toString方法把參数转成字符串。

ajax支持post和get方式请求,get方式的请求參数通过url来传输,因为浏览器对url的长度有限制(通常不超过2048字节)。所以get请求參数不能过大。

post请求使用POST方式提交(与Form的POST方式提交一致)。没有数据限制大小。ajax的post和get的数据都是以文本方式传输,不管是client提交的数据还是服务端返回的数据。

日期一般由年、月、日、小时、分、秒、毫秒组成,能够把日期转为2015-08-17 10:12:14的格式。也能够转为从1970年1月1日0时到如今的毫秒数格式,如1439782850609,仅仅要在服务端做对应的日期格式转换就可以。

日期格式(年-月-日 时:分:秒)

//DateUtils请看博客http://blog.csdn.net/accountwcx/article/details/47446225
$.ajax({
url: './test/ajax.do',
data: {
start: DateUtils.format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
end: DateUtils.format(new Date(), 'yyyy-MM-dd HH:mm:ss')
},
dataType: 'json',
type: 'post'
}).done(function(json){
console.dir(json);
});

浏览器提交的日期数据格式

服务端处理日期(SpringMVC)

@Controller
@RequestMapping("/test")
public class TestController { @InitBinder
public void initBinder(WebDataBinder binder){
//日期处理
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(df, true));
} /**
* 日期
* @param start 開始日期
* @param end 结束日期
* @param response
*/
@RequestMapping("/ajax.do")
public void ajax(Date start, Date end, HttpServletResponse response){
response.setContentType("text/plain;charset=utf-8");
response.setCharacterEncoding("utf-8"); Map<String, Object> json = new HashMap<String, Object>();
json.put("start", start);
json.put("end", end); try{
//把日期返回去
response.getWriter().write(JSON.toJSONString(json));
}catch(IOException e){
e.printStackTrace();
}
}
}

日期格式(1970年1月1日到如今的毫秒数)

$.ajax({
url: './test/ajax.do',
data: {
start: new Date().getTime(),
end: new Date().getTime()
},
dataType: 'json',
type: 'post'
}).done(function(json){
console.dir(json);
});

浏览器提交的日期数据格式

服务端处理日期(SpringMVC)

@Controller
@RequestMapping("/test")
public class TestController {
/**
* 日期
* @param start 開始日期
* @param end 结束日期
* @param response
*/
@RequestMapping("/ajax.do")
public void ajax(Long start, Long end, HttpServletResponse response){
response.setContentType("text/plain;charset=utf-8");
response.setCharacterEncoding("utf-8"); Date startDate = new Date(start);
Date endDate = new Date(end); Map<String, Object> json = new HashMap<String, Object>();
json.put("start", startDate);
json.put("end", endDate); try{
//把日期返回去
response.getWriter().write(JSON.toJSONString(json));
}catch(IOException e){
e.printStackTrace();
}
}
}

ajax日期參数格式问题的更多相关文章

  1. jquery ajax參数加点号状态200进error

    今天开发中遇到一个非常恶心的问题: 用jquery中的ajax提交.发现假设參数中有点号的參数.后台正常返回200状态码的情况下也会走到error:function. 1. 參数data: " ...

  2. jQuery.ajax()方法中參数具体解析

    前言 在项目开发中,为了实现异步向服务端发起请求,最常常使用的就是jQuery.ajax方法了.刚開始需求比較简单,调用jQuery.ajax方法时要传的參数也就那几个常见的參数:url/data/d ...

  3. springMVC3.0(文件上传,@RequestMapping加參数,@SessionAttributes,@ModelAttribute,转发,重定向,数值获取,传參,ajax,拦截器)

    1.项目包结构例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsiz ...

  4. Extjs4.2 ajax请求url中传中文參数乱码问题

    今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: ...

  5. 将序列化成json格式后日期(毫秒数)转成日期格式

    System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaS ...

  6. 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT

    近期项目除了一个问题,场景大概是这种,项目在国外开发.在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数. 所以项目在国外的server上能够正常执行.但是在国内的 ...

  7. ajaxfileupload异步上传附件添加參数的方法

    1.js文件 // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame ...

  8. Python命令行选项參数解析策略

    概述 在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口.只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型.所以 ...

  9. server.htaccess 具体解释以及 .htaccess 參数说明

    .htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...

随机推荐

  1. shell学习四十九天----进程建立

    进程 前言:进程指的是运行中程序的一个实例.新进程由fork()与execve()等系统调用所起始,然后运行,知道他们下达exit()系统调用为止. linux系统都支持多进程.尽管计算机看起来像是一 ...

  2. 你如何理解 HTML5 的 section?会在什么场景使用?为什么这些场景使用 section 而不是 div?

    section元素表示文档或应用的一个部分.所谓“部分”,这里是指按照主题分组的内容区域,通常会带有标题.[也就是每个section对应不同的主题.注意是内容本身的主题,而不是其他人为设定的划分标准. ...

  3. 如何优雅地关闭一个socket

    最近在windows编程时需要考虑到“如何优雅地关闭一个socket”,查阅了一些资料,现将查到的相关资料做个汇编,希望能对后来者有所帮助(比较懒,所以英文资料没有翻译:-)) 1. 关闭Socket ...

  4. 68.connect-flash 用法详解 req,flash()

    转自:http://yunkus.com/connect-flash-usage/ connect-flash 用法详解  前端工具  2016-10-05  2016-10-05  朝夕熊  11 ...

  5. mac: brew的删除

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" ...

  6. django模型系统二

    常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...

  7. echarts插件-从后台请求的数据在页面显示空白的问题

    最近的项目里面关于统计图方面的问题,有涉及到很多,也在博客里面更新了自己所遇到的问题,开发过程中会遇到很多问题,解决技术问题的方法也有千千万 图片.png 在百度上百度了一下,发现了问题所在之处,不得 ...

  8. 随手记录---transform 属性

    其实平时很少用到transform属性,一些放大缩小用width.height可以改变,一些位置变换,更是有margin,而一些旋转.2D.3D变换也不怎么能用得到.不过最近接触了一些图片的缩放,觉得 ...

  9. Node中的JavaScript和浏览器中的JavaScript的区别

    浏览器中的JavaScript: 1.基于ECMAscript规范,这个规范规定了语法 2.添加了dom:用来处理文档 document object model 3.添加了BOM:用于操作浏览器 w ...

  10. 【习题 7-3 UVA - 211】The Domino Effect

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次搜素要往下还是要往右摆. 然后维护一下让每个下标只出现一次就可以了. =>作为剪枝条件 [代码] /* 1.Shoud i ...