我使用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