如何在Spring MVC Interceptor中使用URI模板?

时间:2012-07-13 23:02:58

标签: spring spring-mvc

我有一个类似于下面例子的控制器uri层次结构。

@RequestMapping(value="company/{id}")
public abstract class BaseCompanyController 
{
  // variety of helper methods, protected autowired objects 
}

@Controller
@RequestMapping(value = "company/{id}/documents")
public class DocumentsController extends BaseCompanyController
{
  // document controller methods 
   @RequestMapping(value="something",.... etc)
   public void doSomething(){}
}

@Controller
@RequestMapping(value = "company/{id}/financials")
public class FinancialsController extends BaseCompanyController
{
  // financials controllers methods 
}

我想要做的是定义一些代码,以便在任何子控制器中的任何处理程序方法之前执行。例如,我想在DocumentsController上调用doSomething方法之前运行一些代码。我想要做的事情对于特定的URI层次结构是唯一的。

如果我在处理程序方法之前使用拦截器执行如何从URI中提取URI参数,例如/ company / {id}中的公司ID?我真的不想手工削减URL吗?

拦截器是否可以使用诸如/ company / {id}之类的URI来缩小拦截器映射是否理解URI模板?

1 个答案:

答案 0 :(得分:2)

您只能对每个使用<mvc:mapping/>path属性的URI使用拦截器:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/company/*/documents" />
        <bean class="com.mypackage.DocumentsInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

参考here