我使用spring 2.5和annotations来配置我的spring-mvc web上下文。不幸的是,我无法得到以下的工作。我不确定这是一个错误(看起来像是这样),还是对注释和接口实现子类的工作原理有一个基本的误解。在控制器上使用@Controller实现接口的Spring-MVC问题
例如,
@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() {
...
}
}
当我试图拉起网址,我得到以下讨厌的堆栈跟踪:
javax.servlet.ServletException: No adapter for handler [[email protected]]: 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)
但是,如果我改变酒吧是一个抽象超类并让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注释应该足以将其标记为控制器,并且我应该能够在控制器中实现一个或多个接口,而无需执行其他任何操作。有任何想法吗?
所需注意的是CGLIB是相当不赞成的。 – 2015-07-28 15:44:53