目前我正忙着为我们的网店实施新的网址结构。新的url结构应该针对搜索引擎进行更优化。我们还希望我们的旧结构仍然有效,并将使用301重定向到新结构。
问题是:新结构有时与旧网址冲突。
旧网址映射示例:
@RequestMapping(value = "/brand/{categoryCode}/{categoryName}/{brandGroup}.do", method = RequestMethod.GET)
新结构:
@RequestMapping(value = "/brand/{brandGroup}/{superCategoryName}/{categoryName}.do", method = RequestMethod.GET)
正如您所看到的,url具有相同数量的值,因此旧映射将捕获新映射,反之亦然。
解决此问题的最佳方法是什么?使用url过滤器将旧的重写为新的url结构?
答案 0 :(得分:3)
您可以使用URL router in Spring MVC;您可以在应用程序中定义冲突路线,并使用路线优先级(匹配请求获胜的第一条路线)处理它们并优化请求匹配。
您的路线配置文件可能如下所示:
GET /brand/{<[0-9]+>categoryCode}/{categoryName}/{brandGroup}.do oldcontroller.oldAction
GET /brand/{<[a-zA-Z]+>brandGroup}/{superCategoryName}/{categoryName}.do newController.newAction
答案 1 :(得分:0)
在Spring Boot中,映射@PathVariable
时可以使用正则表达式,这对于解决URL冲突很有用:
@RestController
public class TestController {
@PutMapping("/test/{id:^[1-9][0-9]*}") // id must be a number greater that 1
public void method1(@PathVariable long id, @RequestBody DataDto1 data) {
}
@PutMapping("/test/foo")
public void method1(@Valid @RequestBody DataDto2 data) {
}
}