2011-08-02 88 views
7

我需要映射拦截在带注释控制器的所有方法与@RequestMapping(值=“/客户端”)Spring MVC的:映射路径规则

在映射我有

<mvc:interceptor> 
    <mvc:mapping path="/app/client/*"/> 
    <bean class="com.cci.isa.web.CIPClientHandleInterceptor" /> 
</mvc:interceptor> 

这个拦截完美称为像网址:
1. http://host/app/client/clientUpdateForm?clientId=305

但不要求像URL:
2. http://host/app/client/clientUpdateForm/clientId_305(与方法名称后的斜杠)

如何让它调用第二个变体?

非常感谢。

+0

如果你使用@RequestMapping注解,那么我不明白你为什么也指定一个mvc:拦截器。只需使用 ... – nickdos

回答

1

我认为这将实现你想要什么:

<mvc:mapping path="/app/client/**/*"/> 

的“/ **”表明任意数量的目录。当它与'/ *'结合使用时,您可以看到任意文件夹深度,并带有任意文件名。

+0

不,拦截器不会调用。
我尝试使用路径的下一个组合:
/应用/客户/ **/*
/应用/客户/ **
/应用/客户/ */*
这没有一个变种不呼叫拦截器。 – atovstonog

0

试试上面的建议,但改变注释

@RequestMapping(value = "/client*") 

虽然我会用两种方法用于两个URI模式,并将其传递给一个常用的方法做了“东西” ......

@RequestMapping(value = "/app/client/clientUpdateFormat/{clientId}", method = RequestMethod.GET) 
public String doItOne(@PathVariable("clientId") String clientId) { 
    doItCommon(clientId); 

@RequestMapping(value = "/app/client/clientUpdateFormat", method = RequestMethod.GET) 
public String doItTwo(@RequestParam("clientId") String clientId) { 
    doItCommon(clientId); 
5

这个问题太旧了,但也许这有助于somebo DY。

你应该尝试删除/app,我认为这不是必要的,也许这是导致问题。

<mvc:mapping path="/client/**"/> 
1

如果有

@RequestMapping(value = "/client") 

控制器尝试

<mvc:mapping path="/client**"/> 
0

我的问题是,我们使用的自定义RequestMappingHandlerMapping

<bean name="handlerMapping" 
class="utils.web.versioning.MobileVersionRewritingMappingHandler"> 
    <property name="order" value="0"/> 
    <property name="interceptors"> 
     <list> 
      ... 
     </list> 
    </property> 
</bean> 

XML或代码配置为CORS或任何其他MVC属性呢不影响自定义处理程序映射。 我可以指定CORS配置自定义的处理器映射,但我更喜欢删除旧的配置,并使用它来配置拦截器:

<mvc:interceptors> 
    ... 
</mvc:interceptors> 

现在CORS是工作,我使用XML全球CORS配置。