views:

163

answers:

2

Once I post JSON data to a url in Grails, how can I get access to that data inside of the controller?

+2  A: 

Check out the JSON classes in Grails:

http://grails.org/doc/latest/api/org/codehaus/groovy/grails/web/json/package-frame.html

For example, here's how I iterate over a list of JSON records in a parameter called 'update':

    def updates = new org.codehaus.groovy.grails.web.json.JSONArray(params.updates)
    for (item in updates) {
                    def p = new Product()
        p.quantity = item.quantity
        p.amount = item.amount
        p = salesService.saveProductSales(p)

    }
Mike Sickler
Thanks Mike! Are there any other variables/ways of getting posted data other than params? That's what's really causing me the most pain.
maximus
What's your specific problem? Can you post some code?
Mike Sickler
You know what, I found out that I wasn't posting the json, that's why it never appeared in params. So, your solution works out just fine. Thanks again!
maximus
+3  A: 

Grails automatically parses/unmarshals the JSON and you can access it via request.JSON in your controller. The object returned is of type JSONObject and thus allows map-style access to the properties. You can also directly use this JSONObject for data binding:

def jsonObject = request.JSON
def instance = new YourDomainClass(jsonObject)
Daniel Rinser