gpt4 book ai didi

Spring MVC RequestMapping 匹配错误的 URL

转载 作者:行者123 更新时间:2023-12-02 04:09:34 31 4
gpt4 key购买 nike

我正在为一个 webapp 构建一个 rest api,并且遇到了 RequestMapping 的问题。

基本上有用户,它们被分组到不同的域中。当他们与系统一起工作时,一些信息存储在一个名为“ session ”的对象中并写入数据库。

我有以下网址:

1) http://server.com/api/v1/domain/domainName/sessions - 显示有关域中所有用户的所有 session 的信息。

2) http://server.com/api/v1/domain/domainName/user/userName/sessions - 显示有关特定用户 session 的信息。

我正在使用 spring 3.0.5 并在我的 Controller 类中声明了 2 个处理程序:

@RequestMapping(value = "/{domainId}/sessions", method=RequestMethod.GET)
public void findSessions(@PathVariable final String domainId) {
...
}

@RequestMapping(value = "/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
public void findUserSessions(
@PathVariable final String domainId,
@PathVariable final String username) {
...
}

我正在使用混合 Controller 映射:SimpleUrlHandlerMapping + Annotations

Controller 的基本路径使用 SimpleUrlHandlerMapping 指定:
<property name="mappings">
<value>
/api/v1/domain/** = api.DomainsController
</value>
</property>

问题是两个网址都是由第一种方法处理的。对于 URL 2,用户名绑定(bind)到 域名 路径变量,因此制动方法逻辑。

但是,如果我在请求映射中指定完整路径 - 它工作正常。
@RequestMapping(value = "/api/v1/domain/{domainId}/sessions", method=RequestMethod.GET)
@RequestMapping(value = "/api/v1/domain/{domainId}/user/{username}/sessions", method=RequestMethod.GET)

最佳答案

我认为最好不要混合使用 SimpleUriHandlerMapping 和 RequestMapping 方法。我不认为他们注定要一起工作。

我认为您想要的只是/api/v1/domain 的类级别 RequestMapping ,然后是个别情况的方法级别映射。

因此,换句话说,删除 SimpleUrlHandlerMapping 条目并改为执行以下操作:

@Controller
@RequestMapping(value = "/api/v1/domain")
public class DomainsController {

@RequestMapping(value = "/{domainId}/sessions", method=RequestMethod.GET)
public void findSessions(@PathVariable final String domainId) {
...
}

@RequestMapping(value = "/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
public void findUserSessions(
@PathVariable final String domainId,
@PathVariable final String username) {
...
}

}

这告诉 Spring 这个 Controller 负责所有以/api/v1/domain 开头的请求,然后方法级别的请求映射与此相关。

关于Spring MVC RequestMapping 匹配错误的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992637/

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