【问题标题】:Spring - RequestMapping default method documentation ambiguity/confusion?Spring - RequestMapping 默认方法文档歧义/混乱?
【发布时间】:2020-06-19 03:11:33
【问题描述】:

来自Spring Framework Reference 5.2.7.RELEASE

对于没有 HTTP 方法声明的 @RequestMappingAllow 标头设置为GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS

这当然符合我们的日常编码体验。


但是,在 Spring Framework API 文档 [5.2.7.RELEASE] of RequestMapping

元素method的默认值显示为

默认值:

{}

我对此感到困惑。我在这里错过了什么?

【问题讨论】:

  • 两者都是正确的。 method 用于将其限制为已定义的那些。如果未定义任何内容,则允许所有内容(参考指南中明确表达的内容)。

标签: java spring spring-boot spring-mvc request-mapping


【解决方案1】:

method 参数可用于限制接受的 HTTP 方法。默认是没有限制。所以默认情况下它允许所有 HTTP 方法。

这正是the reference guide 告诉你的。

对于没有 HTTP 方法声明的 @RequestMappingAllow 标头设置为 GET,HEAD,POST,POST,PUT,PATCH,DELETE,OPTIONS

没有method 声明来限制它,因此一切都被接受。

【讨论】:

  • 哦,没错! Allow 标头实际上是根据提供给RequestMappingmethod 元素的值设置的。并排查看文档让我感到困惑。谢谢!
【解决方案2】:

你可以使用下面的例子

    @RequestMapping(value = "/collect_list", method = {RequestMethod.POST,RequestMethod.GET})

【讨论】:

  • 感谢您的努力。但不幸的是,这并没有试图回答这个问题。
【解决方案3】:

这意味着没有默认方法,所以你必须在你的函数上明确声明你想使用哪一个。如果没有,所有类型的请求都将到达该端点。 因此,将其留空并不是一个好习惯。您可以改用@GetMapping 等,例如对@RequestMapping(value = "/myurl", method = {RequestMethod.GET}) 的排序。 一开始可能有点混乱,但如果你声明为空,那么最好选择接收所有请求而不是一个请求。我想这就是它背后的逻辑。

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2021-02-15
    • 2020-02-09
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多