8

JSON を返す必要があるメソッドが Grails コントローラーにあり、JSON のプロパティは Date オブジェクトですが、そうすると:

render myObject as JSON

出力は次のようになります。

{
    "dateProperty": "2010-12-31T23:00:00Z",
    "otherProperty" : "aValue..."
}

コンバーターから使用されるデフォルトの日付形式を変更する方法はありますか?

grails.converters.json.dateプロパティとConfig.groovyを設定しようとしましたgrails.date.formatsが、うまくいきません。 私は何か間違ったことをしていますか、それとも別の方法がありますか?

ありがとう

4

2 に答える 2

7

私は通常、カスタム マーシャラーを使用します。次のドメインがあるとします

class Address { 
  String addressOne
  String city
  //bla bla
  Date dateCreated
}

このように src/groovy の下にクラスを作成します

class AddressMarshaller {
  void register() {
     JSON.registerObjectMarshaller(Address) { Address address ->
      return [ 
         id: address.id,
         addressOne: address.addressOne,
         city: address.city,
         dateCreated: address.dateCreated.format('yyyy-MM-dd')
      ]
  }
}

次に、Bootstrap ファイルで次の操作を行います。

[ new AddressMarshaller() ].each { it.register() }

そのような配列として行う理由は、複数のマーシャラーがあるためです。

これで、いつでも、address as JSON記述した JSON が取得され、正しい日付形式になります。これは、JSON で日付をフォーマットするにはやり過ぎのように思えますが、他にも多くの利点があります。

于 2013-02-05T14:25:57.817 に答える
5

すべての Date タイプにデフォルトの JSON マーシャラーが必要な場合は、この SO answerに示されているような非常に単純なものを使用することもできます。@Gregg の答えは、個々のドメイン クラスに対してはるかに柔軟です。

于 2013-02-14T00:38:55.707 に答える