2012-12-22 14 views
5

Mam następujący:Grails 2.2.0 URLMappings: jakikolwiek sposób używać tego samego adresu URL z różnymi Verb

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

Robi wywołanie http://localhost:8080/platform/users uzyskać listę użytkowników z powrotem. Następnie dodałem to:

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

A teraz dostaję 404 i nie jest trafienie żadnej z metod w UserController. Chciałbym móc użyć tego samego adresu URL z czasownikiem kontrolującym, które działanie. Czy robię to źle, czy Grails nie obsługuje tego?

Odpowiedz

11

Z Grails docs: URL Mappings

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

Twoim przypadku:

"/api/users"(controller: "user") { 
    action = [GET:"list",POST:"save"] 
} 
+0

czuję jak idiota. Wiedziałem to. Must..get..sleep. Dzięki James. – Gregg

+0

Co się stanie, jeśli metody znajdują się w oddzielnych kontrolerach? Lub na przykład/użytkownicy idą do jednej akcji i/users/1111 idzie do innej? – Jackie

+0

@Jackie niż prawdopodobnie masz złą planowaną strukturę aplikacji. Pamiętaj także o przekierowaniach, jeśli są bardziej wyrafinowane. –

2

Sprawdź swoją UserController aby sprawdzić, czy jest allowedMethods zdefiniowane odpowiednio tak:

class UserController { 

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

    def list() { 
    ..... 
    } 

    def save() { 
    ..... 
    } 
}