次のようなクラスでマルチレベルの URL を使用すると、次の例外が発生します@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.
メソッドレベルのマッピングがまったく考慮されていないようです。
でも、入れ@RequestMapping("/api")
たり外したりしてもOK /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;
}
}
web.xml
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
サーブレット-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/" />
私は春3.1を使用しています。alwaysUseFullPath
プロパティを Bean の trueに設定しようとしましRequestMappingHandlerMapping
たが、状況は変わりませんでした。