GSON-Views can't handle immutability?
- Dominant language
- Groovy
- Stars
- 2.9k
- Forks
- 975
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 92
Description
We integrated `grails-views` into an older existing application to provide a good JSON developer experience for newly created and modern single-page applications. We already had some JSON-Endpoints that render a simply model using the Grails JSON marshaller like this:
```
respond(result, formats: ['json'])
```
A lot of those broke in our application and the reason seems to be that `grails-views` can't handle immutable models, which seems like a major flaw in this library. The code where this is explicitly implemented is right here:
https://github.com/grails/grails-views/blob/2.3.x/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultGrailsJsonViewHelper.groovy#L387
For `grails-views` we also implemented the default template `/grails-app/views/object/_object.gson` exactly as described in the documentation, as we do want to fallback to a default behavior, when no explicit gson-view is available. When this view is not found it seems to work, as the fallback is to use the Grails JSON marshaller (like when not using grails-views). But this is a workaround not a real solution.
This following code doesn't produce the expected JSON result:
```
class TestController {
def index() {
def result = new MyResult("Hello World!")
respond(result, formats: ['json'])
}
}
@TupleConstructor
class MyResult {
final String text
}
```
Response:
`{}`
If I remove the `final` from the model it works:
```
@TupleConstructor
class MyResult {
String text
}
```
Response:
```
{
"text": "Hello World!"
}
```
Contributor guide
Assessment
This issue has not been assessed yet.