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

rit*_*esh 10 java rest resteasy

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

例如,我有两个REST GET URI:

/questions/ask/?type=rest
/questions/ask/?byUser=john
Run Code Online (Sandbox Code Playgroud)

现在,REST服务没有将两个GET方法识别为单独的,并且只考虑了它被声明为第一个的1个GET方法.

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

如果您能引用任何资源,我们将非常感激.

dar*_*jan 21

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

@Path("/questions/ask")
Run Code Online (Sandbox Code Playgroud)

根据JSR-311规范:

这种方法(称为子资源方法)被视为普通资源方法(参见第3.3节),只是该方法仅针对与通过将资源类的URI模板与URI模板连接而创建的URI模板匹配的请求URI进行调用.方法.

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

@Path("/questions/ask/type")
@Path("/questions/ask/user")
Run Code Online (Sandbox Code Playgroud)

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


JHS*_*JHS 5

您不能重载REST请求.

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


San*_*age 5

你不能有两个具有相同uri但具有不同请求参数的getter.你可以做的是有一个带有许多请求参数的getter方法.

@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser) 
Run Code Online (Sandbox Code Playgroud)

然后用两个参数调用它

/questions/ask/?type=rest&byUser=john
Run Code Online (Sandbox Code Playgroud)

您必须处理测试方法中的逻辑以相应地处理这些参数.

关于Darijan,我认为考虑下划线逻辑是什么决定采用两种方法或一种方法.如果你要使用2种方法,那么使用两种uri.如果业务逻辑可以使用一个uri,那么使用我回答的方式