Я использую spring 2.5 и аннотации для настройки моего веб-контекста spring -mvc. К сожалению, я не могу заставить работать. Я не уверен, что это ошибка (похоже, это так) или если есть основное недоразумение о том, как работают подклассы аннотаций и интерфейса.
Например,
@Controller
@RequestMapping("url-mapping-here")
public class Foo {
@RequestMapping(method=RequestMethod.GET)
public void showForm() {
...
}
@RequestMapping(method=RequestMethod.POST)
public String processForm() {
...
}
}
работает отлично. Когда контекст запускается, ссылки, обработанные этим обработчиком, обнаруживаются, и все работает отлично.
Однако это не так:
@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 [[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)
Однако, если я изменяю 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 должны быть достаточными, чтобы отметить это как контроллер, и я должен иметь возможность реализовать один или несколько интерфейсов в моем контроллере, не делая ничего другого. Любые идеи?