Is there a way to remove the class field in a JSON converter?
Example:
import testproject.*
import grails.converters.*
emp = new Employee()
emp.lastName = "Bar"
emp as JSON
as a string is
{"class":"testproject.Employee","id":null,"lastName":"Bar"}
I'd prefer
{"id":null,"lastName":"Bar"}
Is there a way to add one more line of code at the end to remove the class field?
Here is yet one way to do it. I've added a next code to the domain class:
static {
grails.converters.JSON.registerObjectMarshaller(Employee) {
return it.properties.findAll {k,v -> k != 'class'}
}
}
But as I found if you have used Groovy @ToString class annotation when you also must add 'class' to excludes parameter, e.g.:
@ToString(includeNames = true, includeFields = true, excludes = "metaClass,class")
My preferred way of doing this:
def getAllBooks() {
def result = Book.getAllBooks().collect {
[
title: it.title,
author: it.author.firstname + " " + it.author.lastname,
pages: it.pageCount,
]
}
render(contentType: 'text/json', text: result as JSON)
}
This will return all the objects from Book.getAllBoks() but the collect method will change ALL into the format you specify.
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