gpt4 book ai didi

java - JAX-RS:通过查询参数实现多种操作

转载 作者:行者123 更新时间:2023-12-01 13:15:56 27 4
gpt4 key购买 nike

我有一个支持多个操作 A、B 和 C 的服务。

每个操作都有不同的参数。我的架构师希望我使用以下 URL 为每个操作实现这些操作:

http://<server>:<port>/application/service?q=A&<query_paramers>
http://<server>:<port>/application/service?q=B&<query_paramers>
http://<server>:<port>/application/service?q=C&<query_paramers>

即他希望我接受操作名称作为查询参数,而不是作为路径参数。

现在的问题是每个操作都有相同的基本 URL,即

http://<server>:<port>/application/service

根据我的理解,如果我需要支持这种格式,那么在我的服务中它将是一个将作为资源公开的方法,并且在该方法中基于“q”的值,我将决定调用哪个操作.

虽然看起来它会起作用,但我对这种方法没有什么担忧

  1. 将公开代表所有三个操作的单个资源,这对我来说看起来不正确。我不确定这方面的行业标准,但我认为资源和应用程序操作/行为之间应该存在一对一的映射。

  2. 单个资源将为所有操作获取参数,这意味着语法将包含单个资源下列出的所有参数,用户将无法找出哪个参数属于哪个操作。

  3. 在单个方法中接受 3 个操作的所有参数的一种解决方法是,我的方法采用单个 @Context UriContext 参数,但在这种情况下,我的语法将不会列出任何参数,这对于用户来说又是错误的将不会获得有关每个操作的可能参数的任何信息。

提前致谢。

最佳答案

你的想法是正确的:如果所谓的“架构师”告诉你只使用 GET 请求(或单个 HTTP 方法),那么你唯一的方法就是拥有单个资源方法,根据参数 q 的值调用一些不同的方法。与您关心的问题相关:

  1. 您将有一个资源方法来处理这三个请求,这很糟糕。但如果您有一个 RESOURCE(即类)来使用三种资源方法处理所有这些请求,那也不错。
  2. 这是正确的。该解决方案的优点是参数的解码是自动为您进行的(例如,您将直接获得一个 Long 参数或一个 Enum,而无需手动解码它们)。
  3. 如果您使用 @Context UriInfo uriInfo 等参数注入(inject),则可以从 UriInfo 实例获取所有 GET 参数(请参阅 getQueryParameters() )。缺点是您将手动对它们进行解码,并相应地传递给一些具有清晰签名的私有(private)方法。

PS:询问您的架构师这样做的原因。如果您更改数据库中的数据,那么发出 GET 请求可能不是一个好主意(想象一下只需复制 URL 并将其粘贴到浏览器中)。除此之外,这是糟糕的代码,您将在其中调试更多代码(想象一下您稍后会得到除 q=a, q=b, q=c 之外的其他 10 个案例)。

关于java - JAX-RS:通过查询参数实现多种操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472649/

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