我正在使用 spring 2.5 和注释来配置我的 spring-mvc web 上下文。不幸的是,我无法使以下工作。我不确定这是否是一个错误(似乎是这样),或者是否对注释和接口实现子类化的工作方式存在基本误解。
例如,
@Controller
@RequestMapping("url-mapping-here")
public class Foo {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
工作正常。当上下文启动时,会发现这个处理程序处理的 url,并且一切正常。
然而,这不会:
@Controller
@RequestMapping("url-mapping-here")
public class Foo implements Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
当我尝试提取 url 时,我得到以下讨厌的堆栈跟踪:
javax.servlet.ServletException: No adapter for handler [com.shaneleopard.web.controller.RegistrationController@e973e3]: Does your handler implement a supported interface like Controller?
org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1091)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
但是,如果我将 Bar 更改为抽象超类并让 Foo 扩展它,那么它会再次起作用。
@Controller
@RequestMapping("url-mapping-here")
public class Foo extends Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
这似乎是一个错误。@Controller 注释应该足以将其标记为控制器,并且我应该能够在我的控制器中实现一个或多个接口,而无需执行任何其他操作。有任何想法吗?