我使用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关联,而不与其他内容关联。