我正在寻找一种方法来获得复杂的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>
答案 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