相关疑难解决方法(0)

Spring-MVC在控制器实现接口时使用@Controller的问题

我正在使用spring 2.5和注释来配置我的spring-mvc web上下文.不幸的是,我无法让以下工作.我不确定这是一个错误(似乎是这样),或者是否存在对注释和接口实现子类化如何工作的基本误解.

例如,

@Controller
@RequestMapping("url-mapping-here")
public class Foo {
  @RequestMapping(method=RequestMethod.GET)
  public void showForm() {
    ...
  }
  @RequestMapping(method=RequestMethod.POST)
  public String processForm() {
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

工作良好.当上下文启动时,会发现此处理程序处理的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() {
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试拉出网址时,我得到以下令人讨厌的堆栈跟踪:

javax.servlet.ServletException: No adapter for handler [com.shaneleopard.web.controller.RegistrationController@e973e3]: 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)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将Bar更改为抽象超类并让Foo扩展它,那么它再次起作用.

@Controller
@RequestMapping("url-mapping-here")
public class Foo extends Bar …
Run Code Online (Sandbox Code Playgroud)

java annotations controller spring-mvc

34
推荐指数
5
解决办法
5万
查看次数

标签 统计

annotations ×1

controller ×1

java ×1

spring-mvc ×1