3

我有一个类似于下面示例的控制器 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 模板?

4

1 回答 1

2

您只能对某些 URI 使用拦截器,并为每个URI 使用<mvc:mapping/>和属性:path

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

参考这里

于 2012-07-14T10:34:52.980 回答