Grails URLMapping со встроенной переменной не найдено

У меня есть файл URLMapping.groovy со следующей структурой:

class UrlMappings {
    static mappings = {
        "/someThing" (resources: "someThingApi", includes: ["index", "show", "create", "update", "delete"]) {
            "/nestedThing/$type?" (controller: "someThingApi", action: [GET: "showNestedThing"])
        }
}

И когда я вызываю интерфейс REST как таковой, он работает нормально (вызывается функция showNestedThing): GET /someThing/{id}/nestedThing, однако, когда я пытаюсь вызвать GET /someThing/{id}/nestedThing/{type}, я получаю следующий ответ:

{
  "timestamp": 1445247531624,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/someThing/1/nestedThing/someType"
}

Вместо того, чтобы вызывать функцию, я мог получить someType, выполнив params.type, как и ожидалось. Если я проверю свои сопоставления URL-адресов grails (отчет о сопоставлении URL-адресов grails), отобразится /someThing/${someThingId}/nestedThing/null? вместо ожидаемого /someThing/${someThingId}/nestedThing/${type}?.

Использование Grails 3.0.9.


person Stijn van Drunen    schedule 19.10.2015    source источник


Ответы (1)


Хотя это не идеально и не отвечает на мой первоначальный вопрос, для моей проблемы возможен обходной путь в виде удаления вложенного URLMapping и добавления его позже в файл URLMapping:

class UrlMappings {
    static mappings = {
        "/someThing" (resources: "someThingApi", includes: ["index", "show", "create", "update", "delete"]) {
            "/nestedThing/$type?" (controller: "someThingApi", action: [GET: "showNestedThing"])
        }
}

Становится:

class UrlMappings {
    static mappings = {
        "/someThing" (resources: "someThingApi", includes: ["index", "show", "create", "update", "delete"])
        "/something/${someThingApiId}/nestedThing/${nestedThingApiId}?" (controller: "someThingApi", action: [GET: "showNestedThing"])
    }
}

На данный момент это устраняет проблему, но не отвечает на вопрос, почему мой исходный вложенный код не работал.

person Stijn van Drunen    schedule 20.10.2015