如果我在课堂上使用多级网址,我会收到以下异常@RequestMapping("/api/v0.1"):
java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'userController'
bean method getUsers()|to {[/api/v0.1]}: There is already 'userController' bean
method getUser(java.lang.String) mapped.
Run Code Online (Sandbox Code Playgroud)
这就像方法级别映射完全没有考虑在内一样.
但是如果我把@RequestMapping("/api")ie删除/v0.1部分就可以了.
以下是针对最小情况的配置:
@Controller
@RequestMapping("/api/v0.1")
public class UserController {
@RequestMapping(value = "/users")
@ResponseBody
public List<User> getUsers() {
return null;
}
@RequestMapping(value = "/users/{username}")
@ResponseBody
public User getUser(@PathVariable String username) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
web.xml中
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
servlet的context.xml中:
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<!-- Forwards requests to the "/" resource to the "welcome" view -->
<mvc:view-controller path="/" view-name="home"/>
<!-- Handles HTTP GET requests for /assets/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
<mvc:resources mapping="/assets/**" location="/assets/" />
Run Code Online (Sandbox Code Playgroud)
我正在使用弹簧3.1.我也尝试alwaysUseFullPath将RequestMappingHandlerMappingbean的属性设置为true,但它没有改变这种情况.
非常有趣的问题 - 我检查了可能发生的情况,你是对的,“v0.1”确实抛弃了它org.springframework.util.AntPathMatcher通过组合来自控制器的路径和来自映射方法的路径来创建完整的 URI 路径。如果它在控制器中看到“file.extension”类型的模式,那么它完全忽略该方法的路径映射 - 这就是为什么你的原因@PathVariable如果它在控制器中看到“file.extension”类型的模式,那么它完全忽略该方法的路径映射 - 这就是您被忽略的
我不确定这是否是 Spring MVC 中的错误或预期行为,临时修复将按照您已经提到的内容进行 -
1.从控制器的RequestMapping中删除“v0.1”并使其不带扩展名v0_1
2.将此映射放入映射方法中:
@Controller
@RequestMapping("/api")
public class UserController {
@RequestMapping(value = "/v0.1/users")
@ResponseBody
public List<User> getUsers() {
return null;
}
@RequestMapping(value = "/v0.1/users/{username}")
@ResponseBody
public User getUser(@PathVariable String username) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5771 次 |
| 最近记录: |