gpt4 book ai didi

java - 在 RequestMapping 问题中使用 @PathVariable 的 Controller 的特定 url

转载 作者:行者123 更新时间:2023-12-02 04:55:25 30 4
gpt4 key购买 nike

尝试在 spring Controller 中为 @RequestMapping 创建特定 url 时,我遇到了一些困难。首先,由于项目使用的框架,有一个 Controller 方法映射到以下 url:“/{pageLabelOrId}

其次,我将另一个 Controller 方法映射到“/{pageName}.html”。这工作正常,这意味着如果我尝试从浏览器“www.applicationUrl/something.html”访问此 url,如果按预期由第二种方法捕获。

现在我的问题来了。我必须以一种不同的方法处理一个在某种程度上不同但也相似的 url,如下所示:“/something-{parameter1}_{parameter2}_{parameter3}”尝试访问“www.applicationUrl/something-1_2_3”将触发第一个 Controller :“/{pageLabelOrId}”而不是所需的 Controller 。

处理这种 url("/something-1_2_3") 是一项要求,我无法将其更改为类似 "/something/{param1}/{param2}/{ param3}”,我相信它会起作用。

然而,我观察到,编写映射到“/something-{param}”的 Controller 方法将起作用,并将在一个 PathVariable(如“1_2_3”)中捕获我的三个参数,我可以之后用“_”解析。

有没有人知道为什么 spring 有这种行为,我是否可以使用三个不同的路径变量以某种方式让它工作?

最佳答案

Spring 3.1+ 使用 RequestMappingHandlerMapping 创建 RequestMappingInfo 对象,将您的 Controller 处理程序方法映射到它们相应的 @RequestMapping 路径。当 DispatcherServlet 收到请求时,它会再次使用 RequestMappingHandlerMapping 来确定应该使用哪个处理程序方法。

目前的实现方式,它会找到所有注册的RequestMappingInfo对象匹配请求,然后根据一些规则对它们进行排序,基本上是AntPathMatcher中定义的那些> 和 AntPatternComparator

您必须配置您的 RequestMappingHandlerMapping bean 以使用自定义 PathMatcher 和您自己的比较规则。

如何执行此操作取决于您如何进行配置。如果你使用一个@Configuration类,你可以做

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

...

@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping();
mapping.setPathMatcher(pathMatcher()); // some PathMatcher bean
return mapping;
}

...
}

RequestMappingHandlerMapping 创建的RequestMappingInfo 对象将在内部使用此PathMatcher。它们将根据其 Comparator 进行排序。

关于java - 在 RequestMapping 问题中使用 @PathVariable 的 Controller 的特定 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087171/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com