java - Spring MVC 3.1 : Problems in using SimpleUrlHandlerMapping and generic base controller

标签 java spring

在 spring 3.1 中,我错过了使用通用基本 Controller 进行默认 url 映射的功能。看下面的例子:

<bean id="appleController" class="de.mw.mwdata.core.web.control.GenericEntityController" />
<bean id="peachController" class="de.mw.mwdata.core.web.control.GenericEntityController" />

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
    <property name="alwaysUseFullPath" value="true"/>
    <property name="mappings">
      <props>
        <prop key="/admin/apple/list.htm">appleController</prop>
        <prop key="/admin/peach/list.htm">peachController</prop>
        <prop key="/admin/strawberry/list.htm">strawberryController</prop>
      </props>
    </property>
</bean> 

<mvc:annotation-driven />

<context:component-scan base-package="de.mw.mwdata.app.admin.web.control" >
</context:component-scan>

这里是 GenericEntityController 和 StrawberryController 的相关代码片段:

    @RequestMapping("/admin/**")
public class GenericEntityController<E extends AbstractEntity> {

    ...

    @RequestMapping(value = "**/list.htm", method = RequestMethod.GET)
    public ModelAndView list( final HttpServletRequest request, final HttpServletResponse response ) {  
        ...
    }

}

package de.mw.mwdata.app.admin.web.control;
@Controller
@RequestMapping("/admin/strawberry/")
public class StrawberryController extends GenericEntityController<Strawberry> {
    ...
    }
}

因此,在 spring 3.1 和 SimpleUrlHandlerMapping 之前,我有两个用于 contextpath apple 和 peach 的 Controller 实例(GenericEntityController),以及一个带注释的 Controller 实例 StrawberryController 的 Controller 实例。到/list.htm-method 的映射是由 @RequestMapping 完成的,特别是在方法级别。 我的问题:在 spring-mvc 3.1 SimpleUrlHandlerMapping 中,带注释的 @RequestMapping 不再起作用。我收到以下异常:

Cannot map 'peachController' bean method 
public org.springframework.web.servlet.ModelAndView de.mw.mwdata.core.web.control.GenericEntityController.list(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
to {[/admin/**/list.htm],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'appleController' bean method
public org.springframework.web.servlet.ModelAndView de.mw.mwdata.core.web.control.GenericEntityController.list(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) mapped.

如何在 spring 3.1 中替换此配置?

最佳答案

首先,非常感谢您的快速答复。 是的,目前它们都映射到同一个路径,不幸的是映射到同一个类:因为 Spring 3.1 中的 RequestMappingHandlerMapping 现在对于每个带有 @RequestMapping-annotations 的 Controller 。那就是问题所在 ! 在 spring 3.1 之前,我定义的 simpleUrlHandlerMapping 负责这一点,并且它不映射到相同的路径/类。相反,我的 GenericEntityController 的每个创建的实例都有一个一对一的映射。不幸的是,我需要为每个“水果”提供一个 GenericEntityController 的 Controller 实例,因为将“特定于水果”的服务注入(inject)到相关 Controller 中。 那么我如何将多个 URL 路径映射到同一通用基本 Controller 类的不同实例呢? 再次感谢每一个提示...

关于java - Spring MVC 3.1 : Problems in using SimpleUrlHandlerMapping and generic base controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802243/

相关文章:

java - 带有 Guice 的 cucumber - 多 guice 注入(inject)器

java - 如何只打印 h :datatable? 的内容

java - Java HashMap 内部数据结构在重新散列过程中如何变化?

arrays - 从嵌入数组的内部文档中检索数据

java - 如何根据其中的两个元素(两列)对类型为 class 的数组列表进行排序

java - 使用mockito时出现空指针异常

java - 方法参数的@Pattern注解

java - 得到 <aop :scoped-proxy/> that is session scoped inside of a jsp

java - 带 jetty 的 Spring Websocket 破坏了 mvc 测试

spring - 如何在 Spring Batch Admin UI 中创建和部署 Spring Batch 作业