【问题标题】:Can I overload REST url resource having different arguments?我可以重载具有不同参数的 REST url 资源吗?
【发布时间】:2014-10-13 01:01:23
【问题描述】:

使用相同的资源 url,是否可以根据参数在下面调用不同的方法?

@POST
@Path("/resource/add")
@Consumes(MediaType.APPLICATION_JSON)
public Response add(Class1 arg1);

@POST
@Path("/resource/add")
@Consumes(MediaType.APPLICATION_JSON)
public Response add(Class2 arg2);

【问题讨论】:

  • 没有。为什么不试试看结果呢?
  • 不,但你可以这样做 @Path("/resource/add/class1")@Path("/resource/add/class2")
  • '/add/' 是多余的,因为 POST 动词意味着创建一个新的类实例。

标签: java rest jax-rs


【解决方案1】:

不,这是不可能的。从您的示例中,我可以看到您正在尝试添加。如果是两个不同的类,我猜它是两个不同的东西。

例如:联系人,类似的项目。

通常在这些情况下,我们会有两个 api。

一个用于添加联系人(Class1),另一个用于添加项目(Class2)。以便客户端清楚地理解。

【讨论】:

    【解决方案2】:

    回答问题

    不,这是不可能的,因为容器没有关于如何路由请求的信息。

    你可以做什么

    正如@Jim Garrison 在 cmets 中指出的那样,您可以通过区分路径来解决这个问题。然而,我觉得这有点违反直觉。据我了解,它根本不是一个不同的资源。您只是想使用不同的表示。

    如果你真的想引入这样的逻辑,也许你应该为特定格式引入你自己的自定义媒体类型并使用它们而不是通用的application/json

    不过,您的 API 客户端必须意识到这一设计决策。如果您不确定引入自定义媒体类型是否是个好主意,请查看这些问题的答案,这可能会更清楚一点:

    如果您不想让表示不同,那么我真的不明白拥有这两个类的意义。也许这个部门不应该到达你的 RESTful API,你应该在内部使用这些表示。在这种情况下,您可能希望实现一个适配器、一个装饰器或一个工厂,以便能够在这两种实现之间切换。如果不知道这些类应该如何使用以及它们代表什么,就很难推荐一个特定的模式。

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2014-05-13
      相关资源
      最近更新 更多