2013-06-03 48 views
0

我有變異的資源,所有的擴展BaseResource<T>干涉新澤西州的REST生命週期

@Component 
@Path("/businesses") 
public class BusinessResource extends BaseResource<Business>{ 

    @GET 
    @Path({businessId}/) 
    public Business getBusiness(@PathParam("businessId") Integer businessId){..} 
} 

@Component 
@Path("/clients") 
public class ClientResource extends BaseResource<Client>{ 

    @GET 
    @Path({clientId}/) 
    public Client getClient(@PathParam("clientId") Integer clientId){..} 
} 

我想,那當有 /businesses/3一個電話,它會先通過,我會寫一個方法,驗證T對象,如果一切正常,我會告訴球衣繼續處理資源。 客戶端也一樣。

我不能使用常規的servlet /過濾器 - 因爲它被稱爲BEFORE jersey servlet,我不知道哪個資源被調用。

澤西島最好的辦法是什麼?

是否有一個地方知道球衣將調用的方法和invokation之間的干涉?

+0

面向方面的編程。 AspectJ的。 –

+0

你可以舉一個例子如何使用它在澤西島? – Dejell

+1

也許:http://www.javakaffee.de/blog/2008/11/15/how-to-use-spring-aop-in-jersey-added-example-resource-class-to-the-spring-annotations -sample/ –

回答

0

有在REST 4種基本HTTP方法,namly GETPUTPOSTDELETE。 您的註釋告訴澤西發生http request時調用什麼方法。 Jersey在請求中查找目標URI,並將其與您的模型進行匹配。如果請求是http get,它將使用正確的@Path註釋執行標註爲@Get的方法。 通常,您不希望直接在此註釋方法中授予對資源的訪問權限。一種常見的(可能不完美)方法是實現處理對資源的訪問的類,並且在將資源返回到註釋方法@Get之前進行驗證,該方法本身只將資源傳遞給客戶端。因此,您將在持久化(SQL等)和客戶端界面(Jersey)之間獲得應用程序中的另一個層。

0

您可以使用帶有NameBinding的球衣2.x ContainerRequestFilters。匹配資源後,綁定過濾器將在執行方法本身之前執行。 您可以查看澤西島用戶指南,其中指出這是可能的: Chapter 9.2.1.1說明有關預先匹配和後期匹配濾波器和chapter 9.4章節顯示球衣濾波器的執行順序。

請參閱我的post以瞭解如何解決問題,使球衣2的過濾器發揮作用。

相關問題