我可以重载具有不同参数的REST url资源吗?

时间:2014-08-19 19:40:08

标签: java rest jax-rs

使用相同的资源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);

2 个答案:

答案 0 :(得分:4)

回答问题

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

你可以做什么

正如@Jim Garrison在评论中指出的那样,你可以通过区分路径来解决这个问题。但是,我发现这有点违反直觉。据我所知,它根本不是一个不同的资源。您只想使用不同的表示形式。

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

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

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

答案 1 :(得分:0)

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

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

一般来说,在这些情况下,我们会有两个api。

一个用于添加联系人(Class1),另一个用于添加项目(Class2)。这样就可以清楚地了解客户端。