gpt4 book ai didi

java - Jersey @Path 用于同一类中的复数/单个 REST 名词

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:27 27 4
gpt4 key购买 nike

我有一个用 @Path 注释的类,如下所示:

@Path("widgets")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {

@GET
public Response getWidgets(@QueryParam("limit"))
{
//This class returns the plural noun, a list of widgets
//...}

@GET
@Path("widget/{id}")
public Response getWidgetById(@PathParam("id") long id)
{
//This class returns a single widget by id
//...}

当我启动测试客户端时,localhost/widgets 会按预期进行映射,但当 getWidgetById 方法映射到 localhost/widgets/widget/{id} 时。这不是我想要的 - 我想要 localhost/widgets 和 localhost/widget/{id}

我尝试在类级别省略 @Path 注释,但这会阻止 Jersey 将此类识别为 REST 资源(我尝试了 ScanningResourceConfigClassNameResourceConfig - 除非在类级别存在 @Path,否则都无法将类作为资源加载。

我想一个(丑陋的)解决方法是将方法拆分为 WidgetResource 类和 WidgetsResource 类。我认为这是一个糟糕的解决方案,因为这两种方法在同一个类中共享资源,但我确实需要 REST-ful localhost/widget (对于单个实体)和 localhost/widgets (复数形式)。

我是否遗漏了什么 - 如果我只是 @Path 注释方法(我无法让它工作),我是否有办法让 Jersey 将该类作为资源类,如果不能,我可以强制绝对映射 (@Path(/widget/{id})) 或一些相对映射 (@Path(../widget/id) -这些在现实中都不起作用 - 只是我所追求的类比。谢谢!

最佳答案

这部分是关于您需要的:

就我个人而言,我发现您的映射很奇怪且令人困惑。保持这样:

@Path("widgets")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {

@GET
public Response getWidgets(@QueryParam("limit")) {
//This method returns the plural noun, a list of widgets
// it's also possible to limit the number returned by
// using a query parameter. You could easily implement
// pagination by adding further query parameters like
// 'offset', 'sortOrder', etc.
//...
}

@GET
@Path("{id}")
public Response getWidgetById(@PathParam("id") long id) {
//This method returns a single widget by id
//...
}
}

将路径附加到带有 ID 的集合以从集合中获取对象似乎很自然。真的没有必要让它成为 widgets/widget/{id}widget 部分显而易见且不必要。

这里有一个关于 RESTful API 的非常简洁的教程:"Teach a dog to REST" by apigee我认为这是一个非常好的视频。作者提出了几个要点。这是 longer version of the same presentation 的链接


这部分是关于您想要的:

如果你真的想保留复数/单数二元论(我真的不推荐),你可以这样注释你的代码:但是真的很难看

@Path("/")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {

@GET
@Path("widgets")
public Response getWidgets(@QueryParam("limit")) {
//This method returns the plural noun, a list of widgets
//...}

@GET
@Path("widget/{id}")
public Response getWidgetById(@PathParam("id") long id) {
//This method returns a single widget by id
//...
}
}

关于java - Jersey @Path 用于同一类中的复数/单个 REST 名词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com