Question

I have a URL that I'd like to handle with different controllers depending on the method. Is there a way to do this via UrlMappings?

Using two different mappings for the same URL doesn't work (the second overwrites the first)...

Was it helpful?

Solution

Untested, but can you try with the below mapping:

"/myurl" {
    if(params.method == "doThis"){
        controller = "doThis"
        action = "doThisAction"
    } else if(params.method == "doThat"){
        controller = "doThat"
        action = "doThatAction"
    }
}

Assuming,

http://<appserver>/myurl?method=doThis
http://<appserver>/myurl?method=doThat

UPDATE
When referring to HTTP Methods you can use filter (where we have request available) as below:

class RoutingFilters{
    def filters = {
        routingCheck(uri: '/myurl/**' ) {
            before = {
                if(request.method == 'GET'){
                    redirect(controller: 'doThis', action: 'doThis')
                }

                if(request.method == 'POST'){
                    redirect(controller: 'doThat', action: 'doThat') 
                }

                //So on and so forth for PUT and DELET

                return false
            }
        }
    }
}

provided the url mapping would look something like:

//defaulting to "doThis" or any other "valid" controller as dummy
"/myurl/$id?"(controller: 'doThis') 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top