2013-02-05 11 views
8

J'ai une méthode dans mon contrôleur Grails qui doit retourner un JSON, une propriété du JSON est un objet Date, mais quand je fais:Comment définir le format de date pour le convertisseur JSON dans Grails

render myObject as JSON 

la sortie est comme:

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

est-il un moyen de changer le format de date utilisé par défaut du convertisseur?

J'ai essayé de définir la propriété grails.converters.json.date et aussi grails.date.formats dans le Config.groovy, mais cela ne fonctionne pas.
que je fais quelque chose de mal ou est-il une autre façon de le faire?

Merci

Répondre

7

J'utilise généralement un Marshaller personnalisé. Supposons que vous avez le domaine suivant

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

Créer une classe sous src/groovy comme celui-ci

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') 
     ] 
    } 
} 

ensuite dans votre fichier Bootstrap, procédez comme suit:

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

La raison pour laquelle je le fais comme un tableau comme ça est parce que j'ai plusieurs marshallers. Maintenant, chaque fois que vous faites address as JSON, vous obtenez le format JSON que vous avez décrit et le format de date correct. Je sais que cela semble exagéré pour le formatage d'une date JSON, mais cela a beaucoup d'autres avantages.

+0

Je peux créer un Marshaller pour mon objet ... dans ce cas, il est pas une réaction trop, parce que ce que je peux cacher la propriété _class_ qu'elle injecte automatiquement dans le JSON créé. Merci – rascio

5

Si vous voulez un défaut JSON placier pour tous les types de date, vous pouvez également utiliser quelque chose de très simple comme indiqué dans this SO answer. La réponse de Gregg est beaucoup plus flexible pour les classes de domaine individuelles.

+0

c'est un excellent conseil. Merci d'avoir partagé! – Rafael

Questions connexes