2016-01-10 22 views
0

我有這個想法,我想爲我的兩類URL分配前綴。一類是參數化UrlMappings在Grails 3中

/baseurl/api/$controller 

的安全REST的URL,然後:

/baseurl/register/$action 

無擔保的URL

我則認爲這將是很好的存儲前綴的當前一類/ API和/或註冊變量,以便在需要時可以引用它們(例如我的安全配置)。但是,我無法在我的UrlMappings中工作。沒有定義URL部分的變量似乎被填充。考慮以下UrlMappings.groovy,我已經定義了一個SignupController.groovy映射到註冊,和所有其他控制器API相關:

class UrlMappings { 
    static final API_URL_ROOT = "/api" 
    static final REGISTER_URL_ROOT = "/register" 
    static mappings = { 
     API_URL_ROOT + "/$controller/$action?/$id?(.$format)?" { 
      constraints { 

      } 
     } 

     REGISTER_URL_ROOT (controller: "signup") 

     "/"(view: "/index") 
     "500"(view: '/error') 
     "404"(view: '/notFound') 
    } 
} 

在運行此我只能通過根URL直接調用我的控制器,即localhost:8080/loginlocalhost:8080/signup,而我希望它是:

localhost:8080/api/v1/loginlocalhost:8080/register/signup

我該如何解決這個問題?

+0

是我回答你的問題仍然不能令人滿意?如果沒有,你能接受嗎 –

回答

0

可以使用組來分隔不同的API

http://mrhaki.blogspot.com/2013/11/grails-goodness-grouping-url-mappings.html?m=1

在你的情況下,它可能會成爲類似的東西

group("/api") { 
    "/$controller/$action?/$id?(.$format)?" { constraints { } } 
    // PUT HERE ALL OTHER API MAPPING 
} 

group("/register") { 
    "/$controller" {} 
    // PUT HERE ALL REGISTER MAPPINGS 
} 

如果你需要考慮你的API版本就這樣做

group("/api") { 
    "/$namespace/$controller/$action/$id?" {} 
    // OR ANY OTHER MAPPING YOU NEED. Then in your controller define 
    // static namespace = 'v1' 
    // for example for your v1 controllers. 
} 

然後你c如果你願意,你可以聲明你是一個變量。

static API="/api" 

group (API) { .... } 

希望有所幫助,如果對噪聲不後悔

+0

這會有幫助嗎?它似乎沒有任何關係,我所描述的問題,除非我失去了一些東西... – IcedDante

+0

看到我更新的答案。 –