2011-11-29 22 views
4

我有兩種方式使用的數據實體,我在頁面加載時用一些數據填充表格,當您單擊該列的一行時,我AJAX瞭解該項目的細節並將其顯示在表單域中。我使用Spring-Roo在服務器端生成REST端點,在客戶端生成Backbone.js。Spring-roo REST JSON控制器mangle日期字段

當表加載時,日期字段具有我期望的格式,直接從我的MySQL數據庫(「yyyy-MM-dd」)。當我得到我的AJAX數據時,日期字段以Unix時間值的形式出現(例如「1323666000000」)。

我可以在客戶端轉換,但這是愚蠢的。任何想法如何讓我的JSON控制器不這樣做?

我試過把這些字段放到我的.java文件中,並且用@DateTimeFormat註解搞亂了,但我看不出有什麼區別。

+0

也許不是你的情況,但...轉換和表示日期應該在視圖/輸入層(瀏覽器或選擇的視圖技術:JSP,JSF ...)上完成。這是因爲您通常需要考慮用戶時區和區域設置來呈現它們。因此,您需要考慮在您的控制器中提供本地化的AJAX結果......或者在客戶端執行。 – jjmontes

回答

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

+0

太棒了!謝謝! –

相關問題