I have two domain classes one is parent and other one is child and i have a hasMany relationship between them. Parent class has many childs and child class belongs to parent class. And here is coding example.
class Parent{ String name static hasMany = [childs:Child] static constraints = { } } class Child{ String name static belongsTo = [parent:Parent] static constraints={} }
Problem is as soon as I get the parent object the child objects associated with parent class were also fetched. But when I convert the object to JSON I don't see the child object completely I can only able to see the ID's of child objects. I want to see all columns of child object instead of only Id.
Converted JSON response:
[{"class":"project.Parent","id":1, "name":"name1","childs":[{"class":"Child","id":1},{"class":"Review","id":2}]}]
But I want the response which contains name of child object too, as follows
[{"class":"project.Parent","id":1,"name":"name1", "childs":[{"class":"Child","id":1,"name":"childname1"}, {"class":"Review","id":2,"name":"childname2"} ] }]
Any help greatly appreciated. Thanks in advance.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With