java - Spring 和多个 Controller 匹配单个路径变量

标签 java spring spring-mvc controller

在 Spring 应用程序中,我有一个带有以下注释的 Controller :

@RequestMapping(value = "/{category}/", method = GET)

我想让其他 Controller 匹配一个预定义的路径变量,例如

@RequestMapping(value = "/payment/", method = GET)

我认为这是可行的,因为我看到有几个网站实现了这种 URL。

例如您可能有多个类别路径

http ://www.mysite.com/computer/
http ://www.mysite.com/smartphone/
http ://www.mysite.com/printer/

然后是其他的“静态内容”

http ://www.mysite.com/payment/
http ://www.mysite.com/shopping-bag/
http ://www.mysite.com/wish-list/

谁能告诉我怎么做?

最佳答案

我用谷歌搜索了一下,在 Spring docs 中找到了我从未尝试过的东西。我认为您可以在请求映射中使用正则表达式来解决问题。

动态路径变量应保持如您所描述的那样,即

@RequestMapping(value = "/{category}/", method = GET)
public String dynamicController(@PathVariable String category){
  ...
}

理论上这将匹配所有 URL,例如:

protocol://localhost:8080/123/
protocol://localhost:8080/random-text/
protocol://localhost:8080/whatever-it-comes/

静态 Controller 应该这样改:

@RequestMapping(value = "/{accepted_path:^payment$}/", method = GET)
public String staticController(){//you don't need to consume the path
  //variable accepted_path
  ...
}

使用正则表达式^payment$应该确保URL

protocol://localhost:8080/payment/

将仅由 staticController 绑定(bind)。

您还可以附加几个可接受的路径变量。例如。如果 staticController 必须匹配以下 URL

protocol://localhost:8080/payment/
protocol://localhost:8080/pay/

然后你应该用 "/{accepted_pa​​th:^payment|pay$}/" 替换 "/{accepted_pa​​th:^payment$}/"

未经测试,但应该可以解决问题!

关于java - Spring 和多个 Controller 匹配单个路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574640/

相关文章:

java - KSQL : Could I use threads in KSQL UDF functions to speed up the process?

java - TLS 将 SSLEngine 下载中间证书

java - Spring请求映射到特定路径变量值的不同方法

spring - 为什么 beans 会被拒绝以及未识别出 URL 路径意味着什么?

java - 如何设置 myweb.property 的位置以便 AnnotationConfigWebApplicationContext getEnvironment 可以找到它?

java - 获取 MultipartFile 的内容

java - (java.lang.NoSuchMethodError) IntelliJ 中的 java.nio.file.Files.lines(Ljava/nio/file/Path;)

java - 休息并行调用服务 - java中的多线程

java - Spring 启动: Perform encryption/decryption using Annotation: MongoDB

Eclipse 不会将 jar 部署到 WEB-INF/lib 目录中