我正在寻找一种方法来实现依赖于数据库内容的复杂 URL 映射。例如,我显示两个 URL 映射:
/{category}/
/{category}/{slug}/{id}
类别可以是例如:
apples, pears, lemons -> resolve to FruitListController,
beans, onions, potatoes -> resolve to VegetableListController.
- 请注意,这些类别存储在数据库中,并且可能会发生更改。
如果我还有 slug 和 id,则必须根据数据库检查它们是否存在。
我可以以某种方式编写某种“类别处理程序”,它会返回相应的类别和关联的 Controller 吗?
显然这是翻译URL -> Request的问题。另外,有没有办法以类似的方式生成反向 Request -> URL ?我想要类似模板的东西:
<c:foreach="apples as apple"
<a href="${link AppleController:defaultView, ID = apple.id}">${apple.name}</a>
</c:foreach>
最佳答案
使用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
关于java - Spring MVC : Advanced annotation based mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202888/