Ich verwende Spring 2.5 und Anmerkungen, um meine Spring-MVC-Web-Kontext zu konfigurieren. Leider kann ich Folgendes nicht zur Arbeit bringen. Ich bin mir nicht sicher, ob dies ein Fehler ist (scheint so) oder ob es ein grundlegendes Missverständnis gibt, wie die Annotationen und Interface-Implementierungsunterklassen funktionieren.Spring-MVC Problem mit @Controller auf Controller zur Implementierung einer Schnittstelle
Zum Beispiel
@Controller
@RequestMapping("url-mapping-here")
public class Foo {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
funktioniert gut. Wenn der Kontext startet, werden die URLs entdeckt, mit denen dieser Handler arbeitet, und alles funktioniert gut.
Dies ist jedoch nicht:
@Controller
@RequestMapping("url-mapping-here")
public class Foo implements Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
Wenn ich versuche, die URL zu ziehen, bekomme ich folgende fiesen Stack-Trace:
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)
Wenn ich jedoch Bar ändern, um eine abstrakt zu sein Superklasse und habe Foo erweitert, dann klappt es wieder.
@Controller
@RequestMapping("url-mapping-here")
public class Foo extends Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
Dies scheint wie ein Fehler. Die @Controller-Annotation sollte ausreichen, um dies als Controller zu kennzeichnen, und ich sollte in der Lage sein, eine oder mehrere Schnittstellen in meinem Controller zu implementieren, ohne etwas anderes tun zu müssen. Irgendwelche Ideen?
benötigt zu beachten, dass CGLIB ist eher veraltet. –