2012-02-08 66 views
1

我正在尋找一種方法來獲得複雜的URL映射,這將取決於數據庫的內容。比如我顯示兩個URL映射:Spring MVC:基於高級註解的映射

/{category}/ 
    /{category}/{slug}/{id} 

類別例如可以是:

apples, pears, lemons -> resolve to FruitListController, 
    beans, onions, potatoes -> resolve to VegetableListController. 
  • 注意,這些類別存儲在數據庫中,並可能會改變。

如果我有另外的slug和id,他們都必須檢查對數據庫,如果他們存在。

我可以以某種方式編寫某種「類別處理程序」,它會返回相應的類別和關聯的控制器?

顯然這是一個翻譯的問題URL - >請求。另外,有沒有一種方法可以以類似的方式向後生成請求 - > URL?我想喜歡在模板中的東西:

<c:foreach="apples as apple" 
     <a href="${link AppleController:defaultView, ID = apple.id}">${apple.name}</a> 
    </c:foreach> 

回答

2

使用WebArgumentResolvers。他們可以訪問WebRequest以查看您的網址。解析器可以執行數據庫查找。 FruitWebArgumentResolver可以返回一個Fruit或返回UNRESOLVED。 VegetableArgumentResolver可能會返回蔬菜或返回UNRESOLVED。參數解析後,處理程序適配器可以映射到將特定類型作爲參數的RequestMapping。例如,

@RequestMapping("/{catagory}/{slug}") 
public void fruitSlugList(Fruit fruit, @PathVariable("slug") String slug){ 

要看到這樣的一個例子,我這​​裏有一個博客帖子使用相同類型的機制: http://www.adamweigold.com/2012/01/using-multpartrequestresolvers-with.html

+0

感謝您的解決方案,儘管我不知道怎麼的博客帖子被連接到我的問題。是否有可能以這種方式定義可選參數?我一直在考慮爲給定的Control:view生成URL - 它是否提供了一些工具來生成它們? – 2012-02-09 19:48:38

+0

我不確定你的意思是「生成URL」。就可選參數而言,如果它們是RequestParams,則它們可以是可選的。 博客文章僅顯示了正在使用的ArgumentResolver的示例。 如果解決方案好,請接受答案(複選標記)。 – aweigold 2012-02-09 20:38:24