Jersey框架覆盖控制器方法或REST请求过滤

时间:2013-09-28 21:05:01

标签: java rest jersey

我需要实现一个控制器来处理过滤器使用Jersey框架的请求。例如:

... / 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 个答案:

答案 0 :(得分: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并且Jersey会将它们放入列表中:@QueryParam("chapter") List<String> chapters < / p>