2012-04-19 3 views
3

У меня есть некоторый код, где один параметр (печенье) может быть передан любой из путей, и я хочу, чтобы справиться с этим таким же образом:Выполнить метод ресурсов перед каждым запросом

@Path("/some/path") 
public class JaxRsService { 

    public void doStuff(@CookieParam("cookie") Cookie cookie) { 
     handleCookie(cookie); 
     // etc. 
    } 

    public void doStuff2(@CookieParam("cookie") Cookie cookie) { 
     handleCookie(cookie); 
     // etc. 
    } 

    public void doStuff3(@CookieParam("cookie") Cookie cookie) { 
     handleCookie(cookie); 
     // etc. 
    } 
} 

Есть ли способ чтобы повлиять на это из каждого метода? Я попытался создать сеттер, но сеттера только дозвонились во время строительства, так что печенье не доступно ..

@Path("/some/path") 
public class JaxRsService { 

    // This never gets called 
    @CookieParam("cookie") 
    public void setCookie(Cookie cookie) { 
     cookie // stuff 
    } 

    // etc. 
} 

Точно так же, есть @PostContruct аннотацию, но она работает только на время конструкта.

Добавление куки, как переменная класса работает отлично, но я все равно придется вызывать метод в каждом запросе:

@Path("/some/path") 
public class JaxRsService { 

    // This never gets called 
    @CookieParam("cookie") 
    Cookie cookie; 

    public void doStuff() { 
     handleCookie(); 
     // etc. 
    } 

    public void doStuff2() { 
     handleCookie(); 
     // etc. 
    } 

    public void doStuff3() { 
     handleCookie(); 
     // etc. 
    } 
} 

Есть ли хороший способ справиться с этим?

+0

Является ли это ресурс верхнего уровня или суб-ресурс? –

+0

@ DonalFellows - это ресурс верхнего уровня. Думаю, я мог бы использовать локатор subresource и некоторую магию. –

ответ

1

В CXF «перехватчики» являются стандартным способом оформления запроса. Однако я не знаю о переносном методе.

... другой метод может быть (собственность, тоже) http://cxf.apache.org/docs/jax-rs-filters.html (что почти то же самое, по сути)

Смежные вопросы