1

目前,我正忙于为我们的网店实现一个新的 url 结构。新的 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 结构?

4

2 回答 2

3

您可以在 Spring MVC 中使用URL 路由器;您可以在您的应用程序中定义冲突路由并使用路由优先级处理它们(匹配请求的第一个路由获胜)并优化请求匹配。

您的路线配置文件可能如下所示:

GET /brand/{<[0-9]+>categoryCode}/{categoryName}/{brandGroup}.do oldcontroller.oldAction
GET /brand/{<[a-zA-Z]+>brandGroup}/{superCategoryName}/{categoryName}.do newController.newAction
于 2012-04-19T09:15:19.510 回答
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) {
    }
}
于 2019-07-22T18:41:20.460 回答