2013-09-28 47 views
0

我需要實現一個控制器來處理請求過濾器使用Jersey框架。例如:澤西框架覆蓋控制器方法或REST請求過濾

.../myservice/book - 顯示所有書籍的列表。

.../myservice/book?chapter = 1,5 - 顯示1和5書籍章節。

.../myservice/book?page = 10,50 - 顯示10和50書頁。

.../myservice/book?chapter = 1,5 & page = 10,50 - 顯示1和5本書的章節,只有10和50本書頁。

我不能使用.../myservice/book/chapter/1,5/page/10,50,因爲可能的情況: .../myservice/book/7 - 顯示書籍7和過濾器以上可以在這裏應用。 是否有可能實現它以這種方式?:

public class TestController { 

@Path("/book") 
@GET 
public Object getBook() { 
    // return a list of all books 
} 

public Object getBook(@QueryParam("chapter") String chapter) { 
    // return books chapters  
} 

public Object getBook(@QueryParam("page") String page) { 
    // return books pages 
} 

public Object getBook(@QueryParam("chapter") String page, @QueryParam("page") String page) { 
    // return books chapters and pages 
    } 
} 

,或者添加各種濾鏡的一個方法和驗證大量的狀況下?

+1

DannyMo,非常感謝你的回答。我會按你的建議去做。 – Mike

回答

0

您不能將相同的路徑圖映射到多個資源方法。您將不得不提供單獨的路徑或使用單一方法。我會選擇後者,然後委託給其他輔助方法:

@Path("/book") 
@GET 
public Object getBooks(@QueryParam("chapter") String chapter, @QueryParam("page") String page) { 
    if (chapter == null && page == null) 
     return getAllBooks(); 
    else if (chapter == null) 
     return getBooksByPages(...); 
    else if (page == null) 
     return getBooksByChapters(...); 
    else 
     return getBooksByPagesAndChapters(...); 
} 

邊注:不是在你的頁碼和章節傳遞的逗號分隔字符串,您可以使用多個查詢參數:.../myservice/book?chapter=1&chapter=5和澤西會拋出他們成爲你的名單:@QueryParam("chapter") List<String> chapters