Это невозможно по умолчанию в Grails.
Глядя на код UrlMappingMatcher, мы видим, что когда мы определяем правило сопоставления с помощью uri, часть метода игнорируется:
@Override
Matcher matches(Map arguments) {
if(arguments.uri) {
uriPatterns << arguments.uri.toString()
}
else {
controllerRegex = regexMatch( arguments, "controller")
actionRegex = regexMatch( arguments, "action")
namespaceRegex = regexMatch( arguments, "namespace")
methodRegex = regexMatch( arguments, "method")
}
return this
}
@Override
Matcher excludes(Map arguments) {
if(arguments.uri) {
uriExcludePatterns << arguments.uri.toString()
}
else {
def exclude = new MapExclude()
exclude.controllerExcludesRegex = regexMatch( arguments, "controller", null)
exclude.actionExcludesRegex = regexMatch( arguments, "action", null)
exclude.namespaceExcludesRegex = regexMatch( arguments, "namespace", null)
exclude.methodExcludesRegex = regexMatch( arguments, "method", null)
excludes << exclude
}
return this
}
Однако вы можете создать подкласс UrlMappingMatcher, который будет учитывать метод, даже когда определен URI, и использовать его вместо обычного в вашем Перехватчике:
// in MyInterceptor.groovy
Matcher match(Map arguments) {
// use your own implementation of the UrlMappingMatcher
def matcher = new MethodFilteringUrlMappingMatcher(this)
matcher.matches(arguments)
matchers << matcher
return matcher
}