我正在使用Spring MVC框架(v3)开发一个Web应用程序。
目前我定义了几个控制器类 - 我通过扩展MultiActionController创建它们,然后在我的web mvc XML配置中定义了bean和URL映射:
QuestionController.java:
public class QuestionController extends MultiActionController implements InitializingBean
{
webmvc-CONFIG.XML
<bean id="questionController" class="com.tmm.enterprise.microblog.controller.QuestionController"></bean>
...
<bean id="fullHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
<property name="mappings">
<props>
<prop key="/question/**">questionController</prop>
</props>
</property>
</bean>
这很好用,我在我的控制器中定义了与被调用的URL匹配的方法,一切正常(例如,我有一个list(..)
方法,当我浏览到/question/list
时,它被正确执行)
但是,对于这个特定的控制器,我想利用Spring中的@PathVariable
选项来允许变量URL(例如我想要一个details(..)
方法,当我调用/question/detail/9999
时 - 其中9999
是问题ID,该方法被执行)。我尝试使用如下:
QuestionController.java:
@RequestMapping("/detail/{questionId}")
public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{
然而,当我运行上面的内容并得到时,我收到错误:
在
中找不到@PathVariable
questionId
[@RequestMapping
]
有没有人遇到过这个?是否可以将RequestMapping
注释与现有的XML配置URL映射混合使用?
答案 0 :(得分:4)
这是来自 DefaultAnnotationHandlerMapping 类的评论,如果我正在阅读评论权限,如果你在QuestionController.java的顶部添加@RequestMapping,它可能会解决你的问题
带注释的控制器通常标有{@link Controller}构造型 在类型级别。 {@link RequestMapping}时,这不是绝对必要的 在类型级别应用(因为这样的处理程序通常实现 {@link org.springframework.web.servlet.mvc.Controller}界面)。然而, 检测 {@ link RequestMapping} 注释需要 {@ link Controller} 如果类型级别不存在{@link RequestMapping},则方法级别。
修改强>
你可以做一些这样的事情,将uri的 / question 部分移到顶部并离开 方法层面的细节部分
@RequestMapping("/question")
public class QuestionController
{
@RequestMapping("/detail/{questionId}")
public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{
}