Grails 2.2.0 URLMappings: Any way to use same URL with Different Verb
Asked Answered
U

2

5

I have the following:

"/api/users"(controller: "user") {
   action = [GET:"list"]
}

Doing a call to http://localhost:8080/platform/users I get a list of users back. Then I added this:

"/api/users"(controller: "user") {
   action = [POST:"save"]
}

And now I get a 404 and it is not hitting either method in UserController. I'd like to be able to use the same URL with the verb controlling which action. Am I doing this wrong or does Grails not support this?

Unsay answered 22/12, 2012 at 3:45 Comment(0)
J
11

From the Grails docs: URL Mappings

static mappings = {
   "/product/$id"(controller:"product") {
       action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
   }
}

For your case:

"/api/users"(controller: "user") {
   action = [GET:"list",POST:"save"]
}
Jeannettajeannette answered 22/12, 2012 at 3:59 Comment(3)
I feel like an idiot. I knew that. Must..get..sleep. Thanks James.Unsay
What about if the methods are in separate controllers? Or for example /users goes to one action and /users/1111 goes to another?Richman
@Richman than probably you have bad planned app structure. Remember also about redirects if it's more sophisticated.Internecine
A
1

Check your userController to see if there is allowedMethods defined accordingly like this:

class UserController {

    static allowedMethods = [save: "POST", list: "GET"]

    def list() {
    .....
    }

    def save() {
    .....
    }
}
Australia answered 22/12, 2012 at 4:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.