考虑一种情况,我们可以使用相同的正则表达式进行多次映射,这些映射应该以编程方式进行验证(例如针对数据库)。
(这不是一段有效的代码,我只是想解释一下我想要实现的目标。注意url路径中的正则表达式)
// Animal controller
@GetMapping(path = "/{animal-category [a-z-]+}/{animal-name [a-z-]+}")
public void show(@PathVariable String animalCategory, @PathVariable String animalName) {
// if animalCategory is not found in database, continue with next controller
}
// Plants controller
@GetMapping(path = "/{plant-category [a-z-]+}/{plant-name [a-z-]+}")
public void show(@PathVariable String plantCategory, @PathVariable String plantName) {
// if plantCateogry is not found in database, continue with next controller - as there is no more, it should return 404
}
答案 0 :(得分:0)
您可以使用如下常规控制器方法来解决此问题:
// General controller method
@GetMapping(path = "/{category [a-z-]+}/{name [a-z-]+}")
public void show(@PathVariable String category, @PathVariable String name) {
// look in database for the category
if(isAnimalCatagory) {
return showAnimal(category, name);
}
else if(isPlantCategory) }
return showPlant(category, name);
}
return "redirect:/404";
}
public void showAnimal(String animalCategory, String animalName) {
// for animal categories
}
public void showPlant(String plantCategory, String plantName) {
// for plant categories
}