Estoy usando el resorte 2.5 y las anotaciones para configurar mi contexto web spring-mvc. Lamentablemente, no puedo hacer que lo siguiente funcione. No estoy seguro de si esto es un error (me parece) o si hay un malentendido básico sobre cómo funcionan las anotaciones y la subclasificación de implementación de interfaz.Spring-MVC Problema al usar @Controller en el controlador que implementa una interfaz
Por ejemplo,
@Controller
@RequestMapping("url-mapping-here")
public class Foo {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
funciona bien. Cuando se inicia el contexto, se descubren las direcciones URL con las que trata este controlador, y todo funciona muy bien.
Sin embargo, esto no lo hace:
@Controller
@RequestMapping("url-mapping-here")
public class Foo implements Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
Cuando intento de levantar la url, me sale el siguiente seguimiento de la pila desagradable:
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)
Sin embargo, si cambio Bar ser un resumen superclase y hacer que Foo lo extienda, luego funciona de nuevo.
@Controller
@RequestMapping("url-mapping-here")
public class Foo extends Bar {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
Parece un error. La anotación @Controller debería ser suficiente para marcar esto como un controlador, y debería ser capaz de implementar una o más interfaces en mi controlador sin tener que hacer nada más. ¿Algunas ideas?
necesarios para señalar que CGLIB es bastante obsoleto. –