jquery - 在Grails日期中将JSON解码到Groovy

标签 jquery ajax json grails

我正在使用Grails 2.4和Ajax。在客户端上,我按如下方式构建JSON数据:

var data = {
    // ... not important
    date: new Date(
            parseInt($("#date_year").val()),
            parseInt($("#date_month").val()) - 1,
            parseInt($("#date_day").val())),
    // ...
};

我使用jQuery Ajax发送日期:
$.ajax({
    url: '${createLink(controller: 'report', action: 'save')}',
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json; charset=utf-8',
    success: function (respondData, textStatus, jqXHR) {
        alert('Saved succesfully');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert('NOT SAVED!!!');
    }
});

在报表 Controller ReportController中,我有操作save(ThreatReport report)。通过某种魔术,Grails能够将JSON数据解码到ThreatReport report参数表示的Groovy模型中(如果有人向我指出有关如何配置的一些文档,我将非常有义务)。ThreatReport类具有Date属性(以及其他属性,但它们工作正常)。但是,Grails似乎很难转换该日期。在JavaScript中,我得到了
Wed Jun 10 2015 00:00:00 GMT+0200 (Central Europe Daylight Time)

但是,在Groovy Controller 中,它突然又回来了:
Tue Jun 09 00:00:00 CEST 2015

如前所述,其余属性已正确转换。

最佳答案

我以前在Java中遇到过时区问题,您是否已经尝试将 -Duser.timezone 用作JVM启动的参数?

参见http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

例:

...java -Duser.timezone=Europe/London

或(不确定是否可行)
...java -Duser.timezone=Etc/GMT+2

更新

Java测试代码
Date date = new Date("2015/6/10");
System.out.println(date);
DateTime date2 = new DateTime(date.getTime(), DateTimeZone.UTC);
System.out.println(date2);

产生输出
Wed Jun 10 00:00:00 CEST 2015
2015-06-09T22:00:00.000Z

举例说明由于时区和/或DST问题引起的日间切换问题(在我的情况下,测试JVM使用正确的时区GMT + 2,因此我在第二个日期中使用了从第一个日期开始的时间戳来强制使用UTC)。

也许这不是您的特定问题,但是当您将正确的时区作为参数传递给 Web应用程序服务器的JVM时(例如,在tomcat启动脚本中,在IDE中为而不是),可能会有所帮助。如果您在欧洲的夏令时,请尝试例如“Etc / GMT + 2”。

这一定不是但可能是问题的根源,我不熟悉您使用的框架,但我知道时区和夏时制问题可能很复杂/令人困惑,因为这可能是自定义和默认设置(操作系统, JVM)以及框架如何处理有/无时间和/或时区的日期。

以防万一,请不要忘记为您的应用程序调整有关时区参数的其他系统上的JVM调用:-)

关于jquery - 在Grails日期中将JSON解码到Groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752591/

相关文章:

jquery - 使用鼠标从中心开始平移大图像

jquery 表单过滤器在每次选择后不会重置

javascript - 通过 file_put_contents 将 Base64 图像发布到文件夹时,ajax 出现 413 Request Entity Too Large 错误

json - Node.js 将 XML 转换为 JSON 并将其返回给前端

javascript - 如何使用 jQuery 的 ajax 方法在点击事件/链接上传递数据?

Jquery 将文本添加到跨度

javascript - iis7.5中如何获取ajax post的值

javascript - header 失败的 AJAX 请求

ios - 如何将 Alamofire 与 Json 字典中的数组一起使用?

ruby-on-rails - 发布文件时出现 Ruby 错误 RangeError