微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – Spring-roo REST JSON控制器mangle日期字段

我有一个数据实体,我使用两种方式,当页面加载时,我用一些数据填充表格,当你点击该列的一行时,我 AJAX了该项目的详细信息并在表单字段中显示它们.我在服务器端使用 Spring-Roo生成的REST端点,在客户端使用Backbone.js.

当表加载时,日期字段具有我期望的格式,直接来自我的MySQL数据库(“yyyy-MM-dd”).当我获得我的AJAX数据时,日期字段作为Unix时间值(例如“1323666000000”)来到我这里.

我可以在客户端转换它,但那是愚蠢的.知道如何让我的json控制器不这样做吗?

我已经尝试将这些字段推入我的.java文件并弄乱@DateTimeFormat注释,但我看不出这有什么区别.

解决方法

您可以将日期转换为JSON响应所需的任何格式.

在您的情况下,您一直在使用java.util.Date类型字段的认JSON日期转换器.这基本上是Spring Roo为您生成内容.看看你的* _Roo_Json方面,你会发现smth.像这样:

public java.lang.String PizzaOrder.toJson() {
    return new JSONSerializer().exclude("*.class").serialize(this);
}

这样的实现使用flexjson.transformer.BasicDateTransformer类来为您转换日期.它实现如下:

public class BasicDateTransformer extends AbstractTransformer {
    public void transform(Object object) {
        getContext().write(String.valueOf(((Date) object).getTime()));
    }
}

你想要的是使用一个不同的,更强大的变压器.幸运的是它伴随着你的Roo,它被称为flexjson.transformer.DateTransformer.现在,为了正确格式化日期,只需将认值替换为新的变换器,例如像这样:

public java.lang.String PizzaOrder.toJson() {
    return new JSONSerializer().exclude("*.class")
             .transform(new DateTransformer("MM/dd/yyyy"),Date.class)
             .serialize(this);
}

就这样 :-)

知道您也可以为不同的字段应用不同的日期(而不仅仅是)转换,如下所示:

transform(new DateTransformer("MM/dd/yyyy"),"person.birthday")

有关flexjson的更多信息,请查看FLEXJSON project page.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐