Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MVC RequestMapping匹配错误的URL_Spring_Spring Mvc - Fatal编程技术网

Spring MVC RequestMapping匹配错误的URL

Spring MVC RequestMapping匹配错误的URL,spring,spring-mvc,Spring,Spring Mvc,我正在为一个webapp构建restapi,但遇到了RequestMapping问题 基本上有用户,这些用户被分组到不同的域中。当他们使用系统时,一些信息存储在一个名为“session”的对象中,并写入数据库 我有以下网址: 1) http://server.com/api/v1/domain/domainName/sessions-显示域中所有用户的所有会话信息 2) http://server.com/api/v1/domain/domainName/user/userName/sessio

我正在为一个webapp构建restapi,但遇到了RequestMapping问题

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

我有以下网址:

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

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

我正在使用spring 3.0.5,并在控制器类中声明了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) {
   ...
}
我使用的是混合控制器映射:SimpleUrlHandlerMapping+注释

使用SimpleUrlHandlerMapping指定控制器的基本路径:

<property name="mappings">
    <value>
    /api/v1/domain/** = api.DomainsController
    </value>
</property>

我认为最好不要混合使用SimpleRiHandlerMapping和RequestMapping方法。我认为他们不应该一起工作

我认为您需要的只是/api/v1/域的类级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,这个控制器负责所有以/api/v1/domain开始的请求,然后方法级请求映射与之相关。

好吧,这不像删除SimpleRhandlerMapping条目和添加@RequestMapping那么容易,但在进行了一些internet搜索之后,我最终设法将它们分离。(我不能完全放弃SUHM,因为还有其他“遗留”控制器)。它现在可以正确地使用DefaultAnnotationHandlerMappingHI,请告诉我在RequestMapping URL中使用{}大括号的用法。@AravindRPillai它们用于指定路径变量。
@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) {
   ...
}

}