使用相同的资源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);
toniedzwiedz.. 7
不,这是不可能的,因为容器没有有关如何路由请求的信息。
正如@Jim Garrison在评论中指出的那样,您可以通过区分路径来解决此问题。但是,我发现这有点违反直觉。据我了解,这根本不是另一种资源。您只想使用其他表示形式。
如果您真的想引入这种逻辑,也许您应该针对特定格式引入自己的自定义媒体类型,并使用它们而不是通用的 application/json
不过,您的API的客户必须意识到这一设计决策。如果不确定引入自定义媒体类型是否是个好主意,请查看这些问题的答案,这可能会使它更加清晰:
如何为RESTful Web服务创建自定义媒体类型(应用程序/ VND)?
使用自定义json内容类型是个好主意
如果您不想让表示形式有所不同,那么我真的不理解拥有这两个类的意义。也许这种划分不应该达到您的RESTful API,您应该在内部使用这些表示形式。在这种情况下,您可能想要实现一个适配器,一个装饰器或一个工厂,以便能够在这两种实现之间进行切换。在不知道应该如何使用这些类以及它们表示什么的情况下,很难推荐一种特定的模式。
不,这是不可能的,因为容器没有有关如何路由请求的信息。
正如@Jim Garrison在评论中指出的那样,您可以通过区分路径来解决此问题。但是,我发现这有点违反直觉。据我了解,这根本不是另一种资源。您只想使用其他表示形式。
如果您真的想引入这种逻辑,也许您应该针对特定格式引入自己的自定义媒体类型,并使用它们而不是通用的 application/json
不过,您的API的客户必须意识到这一设计决策。如果不确定引入自定义媒体类型是否是个好主意,请查看这些问题的答案,这可能会使它更加清晰:
如何为RESTful Web服务创建自定义媒体类型(应用程序/ VND)?
使用自定义json内容类型是个好主意
如果您不想让表示形式有所不同,那么我真的不理解拥有这两个类的意义。也许这种划分不应该达到您的RESTful API,您应该在内部使用这些表示形式。在这种情况下,您可能想要实现一个适配器,一个装饰器或一个工厂,以便能够在这两种实现之间进行切换。在不知道应该如何使用这些类以及它们表示什么的情况下,很难推荐一种特定的模式。