1

Я использую версию Grails 3.1.12.Как отключить сопоставления URL-адресов по умолчанию для некоторых действий

Я хочу отключить некоторые сопоставления URL-адресов по умолчанию для действий, чтобы управлять ими вручную. Например, если контроллер:

class MyController { 

    myAction() { 
     render('Hello') 
    } 
} 

Это действие карты по умолчанию my/myAction, однако я хочу, чтобы отключить это отображение и использовать пользовательские один как этот определено в UrlMappings.groovy:

static mappings { 

    "/$controller/$action?/$id?(.$format)?"{ 
     constraints { 
      // apply constraints here 
     } 
    } 

    '/myCustomAction'(controller: 'my', action: 'myAction') 
} 

/$controller/$action... сопоставляет корабли по умолчанию при создании проекта Grails в первый раз и предоставляет соглашение по умолчанию, которое я по-прежнему хочу для некоторых других действий, однако я хочу исключить отображение по умолчанию для myAction. Я попытался с помощью настройки excludes в UrlMappings.groovy:

static excludes = ['/my/myAction'] 

Однако конечная точка my/myAction продолжает реагировать на отображение по умолчанию.

Как я могу достичь желаемого поведения?

+0

как ваше отображение контроллер '' 'мой/MyAction '' '? разве это не '' 'myController/myAction'''? – dsharew

+0

@DegenSharew соглашение в Grails является 'controllerName/actionName', где имя не содержит часть« Controller »имени класса. См. Http://docs.grails.org/3.1.12/guide/single.html#urlmappings – tcrespog

ответ

1

Путь my/myAction генерируется по умолчанию /$controller/$action mapping. Таким образом вам нужно будет отредактировать раздел ограничений этого отображения для того, чтобы исключить контроллер, то, как это должно работать (albiet некоторые, что некрасиво):

"/$controller/$action?/$id?(.$format)?"{ 
    constraints { 
     controller(validator: { return it != 'my'}) 
    } 
}