URL-адреса Grails, можно ли добавить префикс URL-адресов? - PullRequest
4 голосов
/ 12 мая 2011

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

В моем файле urlmappings у меня есть

"/api/$version/$apiKey/$controller/$acion/$id?"

и у меня также есть такое отображение:

"/blog/$year/$month/$day/$action" {
   controller = 'blog'
 }

Теперь вопрос в том, могу ли я как-то добавить префикс api urlmapping к urlmapping блога, чтобы я мог извлечь выгоду из переменных $ year, $ month, $ day? таким образом, что запрос GET на следующий URL будет действительным:

GET /api/0.1/bs23mk4m2n4k/blog/2001/01/05/list

или вместо этого я вынужден выполнить следующий запрос?

GET /api/0.1/bs23mk4m2n4k/blog/list?year=2004&month=01&day=05

Нужна помощь от GURU urlmappings или отличная манипуляция urlmappings во время выполнения WIZARD:)

Мне нужно решение, которое может повторно использовать существующие не-api urmappings вместо того, чтобы переименовывать их с путем api в качестве префикса.

Ответы [ 3 ]

3 голосов
/ 12 мая 2011

Вы могли бы удалить ApiController из параметров API, а затем перенаправить на контроллер блога.Например:

"/api/$version/$apiKey/$rest**" {
     controller:'api'
     action:'default'
}


import org.codehaus.groovy.grails.web.util.WebUtils
class ApiController {
    def grailsUrlMappingsHolder

    def default = {
        // validate apiKey, etc
        WebUtils.forwardRequestForUrlMappingInfo(request, response, grailsUrlMappingsHolder.match("/${params.rest}"))
    }
}

Контроллер API имеет доступ к параметрам и параметрам apiKey и передает остальные параметры, которые должны быть обработаны UrlMapping контроллера блога.

0 голосов
/ 12 мая 2011

Я думаю, что вы хотите использовать встроенные переменные. Проверьте ссылку на URL-адрес: http://grails.org/doc/latest/guide/single.html#6.4 URL-сопоставления

просто добавьте следующее отображение:

static mappings = {
   "/api/$version/$apiKey/$controller/$year/$month/$day/$action"()
} 

теперь вы можете использовать этот URL, например:

http://localhost:8080/api/0.1/bs23mk4m2n4k/blog/2001/01/05/list

теперь вы перенаправлены на действие списка в контроллере блога. там вы можете использовать params для отображения параметров из URL (как определено в отображении).

ех.

params.version
0 голосов
/ 12 мая 2011

У меня была примерно такая же проблема, я решил ее, используя именованное отображение URL: http://www.grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.4.9%20Named%20URL%20Mappings

Надеюсь, это поможет!

в urlMapping:

name blogWithYear:"/api/$version/$apiKey/$controller/$year/$month/$day":{
controller = 'blog'
action = 'youraction'
}

<g:link mapping="blogWithYear" params="[$version:'0.1', ....., '$year: 2011']">
Show blog
</g:link>

С помощью g: link вы теперь можете скомпилировать URL, как хотите, добавив параметры.

...