2009-03-27 4 views
18

、あなたがコントローラでこれを行うためにJSONコンバーターを使用することができます。GrailsのJSONとして特定の日付形式を返すには? Grailsので

render Book.list() as JSON 

レンダリング結果は、あなたがConfig.groovyの設定を行うことにより、出力の日付を制御することができます

[ 
{"id":1, 
"class":"Book", 
"author":"Stephen King", 
"releaseDate":'2007-04-06T00:00:00', 
"title":"The Shining"} 
] 

です

grails.converters.json.date = 'javascript' // default or Javascript 

すると結果は、ネイティブのJavaScript日付

になります3210
[ 
{"id":1, 
"class":"Book", 
"author":"Stephen King", 
"releaseDate":new Date(1194127343161), 
"title":"The Shining"} 
] 

は、私はこのような特定の日付フォーマットを取得したい場合:

"releaseDate":"06-04-2007" 

私は「収集」を使用する必要があり、入力の手間が必要です。

return Book.list().collect(){ 
    [ 
     id:it.id, 
     class:it.class, 
     author:it.author, 
     releaseDate:new java.text.SimpleDateFormat("dd-MM-yyyy").format(it.releaseDate), 
     title:it.title 
    ] 
} as JSON 

がが簡単ですこれを行う方法?

答えて

35

簡単な解決策があります:Grails 1.1以降、コンバーターはよりモジュラー化されています。残念ながら、私はそれについての文書を完成させませんでした。これは、いわゆるObjectMarshallers(org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshallerインタフェースを実装する単純なPogo/Pojo)を登録することを可能にします。

ご所望の出力を実現するには、BootStrap.groovyでそのように、このようなObjectMarshallerを登録することができます:

import grails.converters.JSON; 

class BootStrap { 

    def init = { servletContext -> 
     JSON.registerObjectMarshaller(Date) { 
      return it?.format("dd-MM-yyyy") 
     } 
    } 
    def destroy = { 
    } 
} 

ありコンバータの出力をカスタマイズするには、いくつかの他の方法があると私は私の最高のやるやりますドキュメンテーションにできるだけ追いついてください。

+0

これは素晴らしいです – tbruyelle

1

また、日付レベル自体で作業することもできます。これはまさにあなたの望むものではないかもしれませんが、あなたのアプリケーション全体で一貫して動作するソリューションのアイデアを喚起する可能性があります。

def doWithDynamicMethods = {ctx -> 

    def customDateToString = {-> 
     def dateFormat = "dd MMM yyyy" 
     def timeFormat = "hh:mm:ss a" 

     def timeCheck = new java.text.SimpleDateFormat("hh:mm:ss SSS a") 
     def formattedTime = timeCheck.format(delegate) 
     def formatString = dateFormat 
     if (formattedTime != "12:00:00 000 AM") 
           formatString = "$formatString $timeFormat" 
     def formatter = new java.text.SimpleDateFormat("$formatString") 
     formatter.format(delegate) 
    } 

    Date.metaClass.toString = customDateToString; 
    java.sql.Timestamp.metaClass.toString = customDateToString; 
} 
+0

日付/タイムスタンプインスタンスがJSON表現に変換されるとき、toStringメソッドは呼び出されません。 乾杯 –

関連する問題