没有注释的Spring MVC 3.1?

时间:2012-04-03 10:35:31

标签: spring spring-mvc annotations spring-annotations

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

我个人不喜欢使用MVC注释;我更喜欢使用SimpleUrlHandlerMapping在一个地方提供webapp的所有URL。

此外,从使用Spring 2.x的许多以前的工作中,我已经习惯了BaseCommandController heirarchy。

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

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


更新

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

@RequestMapping({"/vets", "/another"})
public ModelMap vetsHandler() {

如果这样做的话就好了。

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

此致

1 个答案:

答案 0 :(得分:3)

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

Dispatcher 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>

一个简单的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;
    }
}

mvc annotation-config

的控制器
@Controller
@RequestMapping("/home")
public class HomeController {

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

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