验证嵌套资源的路径

时间:2013-05-24 10:57:55

标签: java web-services rest jersey

我正在使用Jersey来实现一些嵌套资源的RESTful服务。这是我目前所拥有的基本示例:

@Path("/sites")
public class SiteResource {

    @GET
    @Path("/{siteId}")
    public Site get(@PathParam("siteId") long siteId) {
        Site site = // find Site with siteId

        if (site == null) {
            throw new WebApplicationException(Response.Status.NOT_FOUND);
        }

        return site;
    }
}

@Path("/sites/{siteId}/articles")
public class ArticleResource {

    @GET
    @Path("/articleId")
    public Article get(@PathParam("articleId") long articleId) {
        Article article = // find Article with articleId

        if (article == null) {
            throw new WebApplicationException(Response.Status.NOT_FOUND);
        }

        return article;
    }
}

现在假设我有一个siteId = 123的网站和一个articleId = 456的文章。文章资源的正确路径为/sites/123/articles/456。 但在我目前的实现中,siteId完全无关紧要。您还可以使用/sites/789/articles/456来访问资源。

ArticleResource#get方法中,我当然可以检查指定的网站是否存在。但这似乎相当不切实际。如果我添加另一个嵌套资源,我将不得不重复所有检查。

因为在我看来这是一个常见的用例,令我惊讶的是我找不到任何解决这个问题的来源。所以我想知道我是否可能完全偏离轨道并且有更好的方法来处理嵌套资源。

谢谢!

1 个答案:

答案 0 :(得分:0)

该条似乎是本网站的孩子。因此,您可以使用Java和/或数据库方面的某种关系来获取和验证站点和文章。

我会检索包含其子女的网站,以及所请求的文章是否在其中。

如果Site和Article不相关,则整个URI方案不会反映您的资源。