没有注释的 Spring MVC 3.1?

Ste*_*art 5 spring annotations spring-mvc spring-annotations

我正在使用 Spring 3.1 开始一个新项目,并且一直在关注有关如何使用 @Controller 注释的所有文档和论坛意见。

我个人不喜欢为 MVC 使用注解;我更喜欢使用 SimpleUrlHandlerMapping 在一个地方提供一个 web 应用程序的所有 URL。

此外,从以前使用 Spring 2.x 的许多工作来看,我非常习惯 BaseCommandController 层次结构。

我一直很喜欢 Spring,因为它赋予了权力而不受限制。现在我发现 Spring MVC 迫使我将 URL 放入 java 源代码中,这意味着 (a) 我无法将控制器映射到多个 URL,以及 (b) 要发现 webapp 中正在使用的 URL,我必须扫描通过不同的 java 源文件,我觉得这是不切实际的。

请推荐将@Controller 与 SimpleUrlHandlerMapping 结合使用的方法是什么?


更新:

嗨戴夫,你是说你可以像这样映射多个 URL(从 petclini.web.ClinicController 改变)?

@RequestMapping({"/vets", "/another"})
public ModelMap vetsHandler() {
Run Code Online (Sandbox Code Playgroud)

如果这有效,那么很好。

我的问题仍然存在:如果我不想在我的 java 源代码中使用 URL,如何最好地将它们与 @Controller 类映射?

问候,

ski*_*ipy 3

这是一个支持注释和非注释控制器的简单设置。

调度程序 servlet 配置 xml

<mvc:annotation-driven/>
<bean id="testController" class="com.test.web.TestController"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
      <value>
      /test=testController
      </value>
  </property>
  <property name="order" value="0"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

一个简单的 URL 映射控制器

public class TestController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        PrintWriter responseWriter = response.getWriter();
        responseWriter.write("test");
        responseWriter.flush();
        responseWriter.close();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

mvc 注释配置的控制器

@Controller
@RequestMapping("/home")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String dashboard(Model model, HttpServletRequest request) {
        return "home";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想使用自己的处理程序进行 @Controller 注释。你也许可以看看ClassPathBeanDefinitionScannerDefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods