java - Swagger 记录了所有未在 Spring Boot Controller 类中映射的 HTTP 方法
问题描述
我正在使用 Swagger 3.0.0 来记录通过基于 Spring Boot 的应用程序生成的 HTTP API 端点。但是,当我将控制器方法映射到端点时,Swagger 创建了文档,其中将该控制器与所有可能的 HTTP 方法相关联(即使我明确将其编程为与单个 HTTP 方法相关联,比如 GET)。例如,考虑以下代码:
// Application.java
//required imports
@SpringBootApplication
@EnableSwagger2
public class Application {
public static void main (String args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Docket apiConfigurator () {
// build the required Docket
}
}
// DataController.java
// required imports
@RestController
public class DataController {
@ApiOperation(value = "Returns all the data")
@RequestMapping("/data/allData")
public String getAllData () {
// return some data
}
}
现在,如果我要执行这样的操作,那么 Swagger 会自动将该getAllData ()
方法映射到所有 HTTP 方法(GET、PUT、POST 等)。这是错误的,因为唯一getAllData ()
应该关联的方法基本上是 GET 方法。
那么,我应该如何处理这个问题呢?
解决方案
我不知道具体情况,但直接使用@RequestMapping 注解将 GET 方法隐式映射到控制器方法会使 Swagger 感到困惑。这就是为什么在 Swagger 存在的情况下写下映射注释时需要具体的原因。我的意思是,你需要明确地告诉 Spring Boot(和 Swagger)这个控制器方法,比如getAllData ()
映射到一个 HTTP 方法,比如 GET 使用:
@RequestMapping (value = "/path/to/get/foobar", method = RequestMethod.GET)
或者@GetMethod ("/path/to/get/foobar")
这样,基于 Swagger 的文档getAllData ()
只与 GET 相关联,而没有其他任何东西。
推荐阅读
- c# - 如何在 ASP.net MVC 中填充组合框选定项更改的详细信息字段
- c# - 在这种情况下如何检查链表是否有循环
- dependency-injection - requireBinding 有什么用?
- swift - 从另一个类为 Present ViewController Swift 调用特定函数
- android - 在方向更改期间保存 Recycler 视图的实例
- c# - 在 C# 的循环中使用 lambda 表达式启动任务
- c - SIGIO 什么时候开火?
- sql - 如何更改表
- google-apps-script - 如何在 gmail 插件的谷歌脚本中删除单选按钮的自动选择?
- c - 使用 O_CREAT 时 open 的执行