I inherited a Grails 2 codebase about 8 months ago. I'd never worked with Java or Spring before, but I have pretty extensive experience with Django, Flask and Symfony (inspired by Spring, as I understand it). Anyway, from my perspective, I'm sorry to say I have to strongly disagree with all of these points - I've never had a more miserable experience with a framework.
<rant>
First off, I found the documentation to be really bad. All of it assumes you're already deeply familiar with Spring/Hibernate, and it offers zero direction for those who aren't. Furthermore, Grails has a ton of magic. Which I guess could be OK, but again, it's all very poorly documented - and trying to read the source code of Grails itself to get a grasp on what's going on? Forget it.
Development speed? Hot code reloading pretty much doesn't work; any time I add or change a route, or a JSON marshaller (aka a serializer in every other framework known to mankind[0]), or simply add a JS file, you have to restart the dev server. Which, to top it off, spins up insanely slow compared to a proper dynamic language.
GORM. Same documentation rant. They cover the simple cases and leave you in the dark if you need to do anything more complex than a join. Luckily people on SO are helpful here, but I wish I could understand what the hell is going on behind the scenes.
Plugin ecosystem? Seems pretty small/inactive, especially compared to Django. Oh, and each time you install a plugin, expect at least another 30 seconds to spin up the development server.
Breaking changes? The recommended upgrade path from 2 to 3 is "start a new project and copy over your files." WTF?
The parameter binding/validation does work pretty well, as long as you don't try and do anything non-straightforward. But step outside the box, and it falls apart. And again, the documentation of these magical transformations is utter shit. Related: no default arguments allowed for controller parameters? Really guys?
[0] This whole "let's make up a new name for some already widely established concept/function" appears especially rampant in Groovy/Grails. Not a fan.
</rant>
Perhaps coming from the perspective of JavaLand it's an upgrade, but man, this shit is not for me. Sorry for the rant.