如何在Scalatra中定义子资源路由

时间:2013-04-03 20:46:05

标签: scala rest scalatra

我有authorarticle等REST资源。可以有多个Author,每个author可以拥有多个articles。我知道可以在一个servlet中为他们的Scalatra处理程序建模,如

  • /author/:id/article
  • /author/:id/article/:id

等。但这样做我的servlet文件变大了。它看起来author下的所有内容都需要在一个servlet中处理。

我想将这些东西拆分成几个独立的servlet,这些servlet在一起注册时会组成整个资源地址。所以我希望在一个servlet中有author个相关的东西,在另一个servlet中有article个相关的东西。

Scalatra有没有办法做到这一点?我发现了关于Sinatra的类似问题,但没有得到好的答案Sub routing in Sinatra

1 个答案:

答案 0 :(得分:3)

您应该可以根据需要设置servlet和路由。

例如,您可以设置两个servlet,如下所示:

class AuthorsServlet extends WebStack {
  get("/authors") { }

  get("/authors/:id") { }
}

class ArticlesServlet extends WebStack {
  get("/authors/:authorId/articles") { }

  get("/authors/:authorId/articles/:id) { }

}

然后在ScalatraBootstrap中注册您的servlet:

override def init(context: ServletContext) {
  context.mount(new AuthorsServlet, "/*")
  context.mount(new ArticlesServlet, "/*")
}