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

 一月的泰迪熊 发布于 2022-12-27 10:31

使用相同的资源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,您应该在内部使用这些表示形式。在这种情况下,您可能想要实现一个适配器,一个装饰器或一个工厂,以便能够在这两种实现之间进行切换。在不知道应该如何使用这些类以及它们表示什么的情况下,很难推荐一种特定的模式。

1 个回答
  • 回答问题

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

    你可能会做什么

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

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

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

    如何为RESTful Web服务创建自定义媒体类型(应用程序/ VND)?

    使用自定义json内容类型是个好主意

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

    2022-12-27 10:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有