【问题标题】:Spring XML handler MappingSpring XML 处理程序映射
【发布时间】:2014-12-09 22:53:58
【问题描述】:

是否可以通过 XML 配置在 SimpleUrlHandlerMapping 或其他 XML handlerMapper 中指定请求方法类型?并调用控制器方法呢??

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="order" value="1" />
   <property name="mappings">
     <props>
       <prop key="/welcome.htm" >clinicController</prop> 
       // something like <prop key="/welcome.htm" method="GET" controllerMethod="someMethod1 ..."
       <prop key="/vets.htm">clinicController</prop>  
       // something like <prop key="/vets.htm" method=PUT method="GET" controllerMethod="someMethod2 ..."
       <prop key="/meds.htm">clinicController</prop>  
       // something like <prop key="/meds.htm" method=POST method="GET" controllerMethod="someMethod3 ..."
     </props>
   </property>
</bean>

我试图找到答案,但我什么也找不到。我更喜欢使用 XML 配置而不是注释。但是在注释中可以使用

@RequestMapping(value = "/welcome.htm", method = RequestMethod.GET)

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    你不能。 SimpleUrlHandlerMapping 实际上是一个遗留的 spring HandlerMapping 实现,它对旧式的 pre-2.5 mvc 模型非常有用。在该模型中,您必须扩展特定的控制器类,因此行为是预先配置的(即每个控制器类型的标准工作流对每个请求强制执行)。换句话说,GET 或 POST 方法由您可能覆盖的预定义抽象或具体方法处理。 因此,这种模式使方法类型映射变得多余。

    在 Spring 3.1 之前,您甚至可以在某种程度上混合这两种模式。可以使用 SimpleUrlHandlerMapping 将控制器 bean 映射到某个 url 前缀,并通过方法类型(或通过其余 url 部分或参数等)进一步细化,通过使用注释向控制器方法。这是可能的,因为 bean 和方法映射是在不同的点进行的。 Spring 参考对此很明确:

    在 Spring 3.1 之前,类型和方法级别的请求映射是 分两个阶段进行检查——首先选择一个控制器 DefaultAnnotationHandlerMapping 和实际调用的方法 被 AnnotationMethodHandlerAdapter 缩小为第二。和 Spring 3.1 中的新支持类, RequestMappingHandlerMapping 是唯一做出决定的地方 关于应该处理请求的方法。考虑到 控制器方法作为具有映射的唯一端点的集合 对于从类型和方法级别派生的每个方法@RequestMapping 信息。

    总的来说,今天注释驱动的 mvc 是首选方式,并且比旧风格的方式灵活得多。由于 IDE(如 STS)现在提供了在一个视图中检查所有处理程序映射的方法,因此我看不到任何真正的缺点。当然这只是我的看法,所以你可以放心地忽略它,但至少要权衡每种方法的优点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      相关资源
      最近更新 更多