我们可以使用不同的查询参数创建相同的 GET URI 吗?
例如,我有两个 REST GET URI:
/questions/ask/?type=rest
/questions/ask/?byUser=john
现在 REST 服务没有将两个 GET 方法识别为单独的,并且只考虑了 1 个声明为第一个的 GET 方法。
- 为什么会这样?
- 有什么方法可以让两个 GET 方法具有不同的查询参数?
如果您能引用任何资源,我们将不胜感激。
因为资源由其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 代表多个资源,则意味着您在某处弄错了。
您不能有两个具有相同 uri 但请求参数不同的 getter。您可以做的是拥有一个带有许多请求参数的 getter 方法。
@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser)
然后用两个参数调用它
/questions/ask/?type=rest&byUser=john
您必须处理测试方法内部的逻辑以相应地处理这些参数。
关于 Darijan,我认为考虑下划线逻辑是什么,由两种方法或一种方法决定。如果您要使用 2 种方法,则使用两个 uri。如果业务逻辑可以使用一个 uri,则使用我回答的方式
您不能超载 REST 请求。
在您的业务层中,您必须检查设置了两个变量中的哪一个,然后您必须进行所需的处理。
您可以根据请求中存在的请求/查询参数来重载其余端点。这是解决我的用例的答案:为具有不同参数的相同 url 模式创建两个方法