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

时间:2013-06-24 07:52:20

标签: java rest resteasy

我们可以使用不同的查询参数创建相同的GET URI吗?

例如,我有两个REST GET URI:

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

现在REST服务没有将两个GET方法识别为单独的,并且只考虑它被认为是第一个GET方法。

  1. 为什么这样做?
  2. 有什么办法可以让两个GET方法有不同的查询参数吗?
  3. 如果您能引用任何资源,我们将非常感激。

4 个答案:

答案 0 :(得分:22)

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

@Path("/questions/ask")

根据JSR-311 spec

  

这种被称为子资源方法的方法被视为正常方法   资源方法(参见第3.3节),但仅调用方法   对于与通过连接创建的URI模板匹配的请求URI   带有URI模板的资源类的URI模板   方法

由于您的数据模型包含两个不同的资源,我建议使用不同的路径制作两个休息方法:

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

这是RESTful方式,因为一个URI代表一个且只有一个资源,并且不应该有重载。如果一个URI代表多个资源,那意味着你在某个地方弄错了。

答案 1 :(得分:5)

您无法重载REST请求。

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

答案 2 :(得分:5)

您不能拥有两个具有相同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,那么使用我回答的方式

答案 3 :(得分:0)

您可以根据请求中存在的请求/查询参数来重载其余端点。这是解决我的用例的答案:create two method for same url pattern with different arguments