我有一个数据实体,我以两种方式使用,当页面加载时,我用一些数据填充一个表,当你点击该列的一行时,我AJAX了该项的详细信息并显示它们在表单字段中。我在服务器端使用Spring-Roo生成的REST端点,在客户端使用Backbone.js。
当表加载时,日期字段具有我期望的格式,直接来自我的MySQL数据库(“yyyy-MM-dd”)。当我获得我的AJAX数据时,日期字段作为Unix时间值(例如“1323666000000”)来到我这里。
我可以在客户端转换它,但这是愚蠢的。知道如何让我的json控制器不这样做吗?
我已经尝试将这些字段推入我的.java文件并弄乱了@DateTimeFormat注释,但我看不出这有什么区别。
答案 0 :(得分:4)
您可以将日期转换为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);
}
这就是全部: - )
知道您也可以对不同的字段应用不同的Date
(而不仅仅是)转换,如下所示:
transform(new DateTransformer("MM/dd/yyyy"), "person.birthday")
有关flexjson的更多信息,请查看FLEXJSON project page。