2012-07-13 62 views
3

我有一個類似於下面的例子的控制器uri層次結構。如何在Spring MVC Interceptor中使用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?我真的不想手動刪除網址嗎?

是否可以通過URI(如/ company/{id})來縮小攔截器攔截器映射是否理解URI模板?

回答

2

可以使用<mvc:mapping/>path屬性爲每一個使用僅針對特定URI的攔截器:

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

參考here

相關問題