Spring MVC:基于高级注释的映射

时间:2012-02-08 23:00:43

标签: java spring-mvc annotations url-routing

我正在寻找一种方法来获得复杂的URL映射,这取决于数据库的内容。例如,我显示了两个URL映射:

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

类别可以是例如:

    apples, pears, lemons -> resolve to FruitListController, 
    beans, onions, potatoes -> resolve to VegetableListController.
  • 请注意,这些类别存储在数据库中,可能会更改。

如果我还有slug和id,则必须根据数据库检查它们是否存在。

我可以以某种方式编写某种“类别处理程序”,它会返回相应的类别和关联的控制器吗?

显然,这是翻译网址 - >的问题。请求即可。另外,有没有办法向后生成请求 - >网址以类似的方式?我想要模板中的东西:

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

1 个答案:

答案 0 :(得分:2)

使用WebArgumentResolvers。他们可以访问WebRequest以查看您的网址。解析器可以进行数据库查找。 FruitWebArgumentResolver可以返回Fruit或返回UNRESOLVED。 VegetableArgumentResolver可以返回一个Vegetable或返回UNRESOLVED。解析参数后,处理程序适配器可以映射到RequestMapping,它将特定类型作为参数。例如,

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

要查看此示例,我在此处有一篇博客文章,它使用相同类型的机制: http://www.adamweigold.com/2012/01/using-multpartrequestresolvers-with.html