具有不同查询参数的两个 GET 方法

2022-09-04 05:36:19

我们是否可以使用相同的 GET URI 但具有不同的查询参数?

例如,我有两个 REST GET URI:

/questions/ask/?type=rest
/questions/ask/?byUser=john

现在,REST 服务不会将两个 GET 方法识别为单独的方法,并且只将其视为 1 个声明为第一个 GET 方法。

  1. 为什么会这样?
  2. 有没有办法使两个GET方法具有不同的查询参数?

如果您能引用任何资源,我们将不胜感激。


答案 1

因为资源由其 PATH(而不是由其参数)唯一标识。您定义的两个资源具有相同的 PATH。

@Path("/questions/ask")

根据 JSR-311 规范

此类方法(称为子资源方法)被视为普通资源方法(请参阅第 3.3 节),只是仅针对与通过将资源类的 URI 模板与方法的 URI 模板串联起来创建的 URI 模板匹配的请求 URI 调用该方法

由于您的数据模型包含两个不同的资源,因此我建议使用不同的路径创建两个 rest 方法:

@Path("/questions/ask/type")
@Path("/questions/ask/user")

这是 RESTful 方式,因为一个 URI 表示一个且只有一个资源,并且不应有重载。如果一个 URI 表示多个资源,则表示您在某个地方弄错了。


答案 2

不能重载 REST 请求。

在您的业务层中,您必须检查设置了两个变量中的哪一个,然后必须执行所需的处理。