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,通过使用

  1. @RequestMapping (value = "/path/to/get/foobar", method = RequestMethod.GET)
  2. @GetMethod ("/path/to/get/foobar")

通过这种方式,基于Swagger的文档只将getAllData ()与GET关联,而不与其他内容关联。

相关内容

最新更新