gpt4 book ai didi

spring-mvc - Spring MVC 多个 url 映射到同一个 Controller 方法

转载 作者:行者123 更新时间:2023-12-01 08:53:07 24 4
gpt4 key购买 nike

假设我们在 web.xml 中有一个名为 dispatcher 的 servlet 的 3 个 url 模式:

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/aaa/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/bbb/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/ccc/*</url-pattern>
</servlet-mapping>

和一个 Controller 方法:
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {}

由于@RequestMapping中的路径值不包含servlet路径,当用户请求
/aaa/xxx
/bbb/xxx
/ccc/xxx

请求将全部映射到方法 foo。

我认为如果网站非常复杂,这可能会导致潜在的问题。这是 Spring Web MVC 中的缺陷还是我误解了什么?

最佳答案

您可以通过传递多个值将所有请求映射到一个请求映射。

@RequestMapping(value = {"/aaa/xxx", "/bbb/xxx", "/ccc/xxx"}, method = RequestMethod.POST)
public String foo() {}

只需更改 web.xml 中的映射以处理对 dispatcher 的所有类型的请求小服务程序。
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

您可以根据应用程序要求或 Web 流定义不同的 Controller 。如果需要,您可以移动实用程序类中的常见代码。
@RequestMapping("/aaa")
public class AAAController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}

@RequestMapping("/bbb")
public class BBBController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}

@RequestMapping("/ccc")
public class CCCController {
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
public String foo() {
// call to common utility function
}
// other methods
}

在 Spring 阅读更多内容 Web MVC framework documentation

您也可以以编程方式对其进行配置
public class MyWebApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext container) {
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
registration.setLoadOnStartup(1);
registration.addMapping("/*");
}
}

关于spring-mvc - Spring MVC 多个 url 映射到同一个 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36078582/

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