当前位置: 首页 > 知识库问答 >
问题:

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

艾俊悟
2023-03-14

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

例如,我有两个REST GET URI:

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

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

  1. 为什么会这样

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

共有3个答案

巫马欣嘉
2023-03-14

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

澹台岳
2023-03-14

您不能重载REST请求。

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

子车俊材
2023-03-14

因为资源是由其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代表多个资源,则意味着您在某个地方弄错了。

 类似资料:
  • 问题内容: 我们可以创建相同的GET URI,但使用不同的查询参数吗? 例如,我有两个REST GET URI: 现在,REST服务无法将两个GET方法识别为单独的,而仅将其声明为第一个GET方法。 为什么会这样呢? 有什么办法可以使两个具有不同查询参数的GET方法? 如果您可以引用任何资源,将不胜感激。 问题答案: 因为 资源 是由其 PATH 唯一标识的,而不是由其参数唯一标识的。您定义的两个

  • 我想为相同的url模式创建两个具有不同参数的方法 Spring支持这一点,并且工作正常。SpringDoc没有。它使用2个参数创建一个endpoint。这是一个已知的问题吗?

  • 我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点

  • 我试图以以下格式提出API请求: 如何使用组件查询字符串参数执行此操作? 由于重复数组键,上述方法不起作用? 我也尝试过:

  • 我有一个场景,其中一个url“serachUser”可能带有两个不同的值(请求参数)userId或UserName。 为此我创造了两种方法 但我得到模糊映射发现异常。Spring能处理这种情况吗?

  • 问题内容: 我有一个方案,其中一个网址“ serachUser”可能带有两个不同的值(请求参数)userId或UserName。 为此,我创建了两种方法 但我越来越模糊的映射发现异常。Spring有任何方法可以处理这种情况。 问题答案: 你可以使用该参数按HTTP参数进行过滤。在你的情况下,它将类似于: