我有一个数据实体,我以两种方式使用它,当页面加载时,我用它的一些数据填充一个表,当您单击该列的一行时,我AJAX该项目的详细信息并将它们显示在表单字段中。我在服务器端使用Spring-Roo生成的REST端点,在客户端使用Backbone.js。
当表加载时,日期字段具有我期望的格式,它直接来自我的MySQL数据库("yyyy-MM-dd")。当我获得AJAX数据时,日期字段以Unix时间值的形式出现(例如"1323666000000")。
我可以在客户端转换它,但那很愚蠢。你知道怎样才能让我的json控制器不这么做吗?
我尝试将这些字段放入我的.java文件中,并处理@DateTimeFormat注释,但我看不出这有什么不同。
发布于 2011-12-12 23:07:55
您可以将日期转换为JSON响应所需的任何格式。
在您的示例中,java.util.Date类型字段一直使用默认的JSON date转换器。这基本上就是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。
https://stackoverflow.com/questions/8311962
复制相似问题