json converter

  • http://stackoverflow.com/questions/19144246/grails-get-child-domain-objects
  • The issue is with the use of default JSON converter. Here are your options:
    1. Default  -  all fields, shallow associations
        a. render blah as JSON
    
    2. Global deep converter - change all JSON converters to use deep association traversal
        a. grails.converters.json.default.deep = true
    
    3. Named config marshaller using provided or custom converters
        a. JSON.createNamedConfig('deep'){
            it.registerObjectMarshaller( new DeepDomainClassMarshaller(...) )
        }
        b. JSON.use('deep'){
            render blah as JSON
        }
    
    4. Custom Class specific closure marshaller 
        a. JSON.registerObjectMarshaller(MyClass){ return map of properties}
        b. render myClassInstance as JSON
    
    5. Custom controller based closure to generate a map of properties
        a. convert(object){
            return map of properties
        }
        b. render convert(blah) as JSON

    You are currently using Option 1, which is default.

    The simplest you can do is use Option 2 to set global deep converter, but be aware this effects ALL domain classes in your app. Which means that if you have a large tree of associations culminating in a top level object and you try to convert a list of those top level objects the deep converter will execute all of the queries to fetch all of the associated objects and their associated objects in turn. – You could load an entire database in one shot 🙂 Be careful.

Advertisements
This entry was posted in Grails. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s