Swagger APIs 数组对于 SpringMVC 应用程序是空的
Swagger APIs array is empty for SpringMVC app
我按照 Swagger-springmvc README 中的描述为我的 Spring MVC 项目设置了 Swagger。我使用 Spring Java 配置而不是 XML 基于 Spring 配置。作为构建系统,我使用 Gradle.
当我向 api-docs
执行 GET
请求时,我得到关注 JSON
{"apiVersion":"1.0","apis":[],"authorizations":{},"info":{"contact":"My Apps API Contact Email","description":"My Apps API Description","license":"My Apps API Licence Type","licenseUrl":"My Apps API License URL","termsOfServiceUrl":"My Apps API terms of service","title":"My Apps API Title"},"swaggerVersion":"1.2"}
我的问题是 apis
数组是空的。
我的控制器class具有以下结构
@Api(value= "path", description = "Description")
@Controller
public class MyController {
public static final String URL_1 = "/url1";
public static final String URL_2 = "/url2";
@Autowired
private SomeService service;
@Autowired
private SomeRepository repository;
@Autowired
private SomeConverter converter;
@RequestMapping(method = RequestMethod.POST, value = URL1)
public void nextTask(HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
Task task = getNextTask();
String taskAsText = converter.toTextHandledWithComputeNode(task);
writer.write(taskAsText);
}
@RequestMapping(method = RequestMethod.POST, value = URL_2)
@ResponseStatus(value = HttpStatus.OK)
public void taskResult(@PathVariable("id") String id) {
service.mark(id);
}
}
此外,我尝试在 class 声明之前添加 @RequestMapping("/path")
注释,但它对我没有帮助。
我的配置class
@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan(basePackages = {"com.my.controller"})
public class MVCConfig {
private SpringSwaggerConfig springSwaggerConfig;
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean //Don't forget the @Bean annotation
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.includePatterns(".*pet.*");
}
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"My Apps API Title",
"My Apps API Description",
"My Apps API terms of service",
"My Apps API Contact Email",
"My Apps API Licence Type",
"My Apps API License URL"
);
return apiInfo;
}
}
你能帮我解决这个问题吗?
将您的包含模式更改为
.includePatterns(".*url.*");
应该可以解决您的问题。问题是您没有任何包含单词 pet 的请求映射。
我按照 Swagger-springmvc README 中的描述为我的 Spring MVC 项目设置了 Swagger。我使用 Spring Java 配置而不是 XML 基于 Spring 配置。作为构建系统,我使用 Gradle.
当我向 api-docs
执行 GET
请求时,我得到关注 JSON
{"apiVersion":"1.0","apis":[],"authorizations":{},"info":{"contact":"My Apps API Contact Email","description":"My Apps API Description","license":"My Apps API Licence Type","licenseUrl":"My Apps API License URL","termsOfServiceUrl":"My Apps API terms of service","title":"My Apps API Title"},"swaggerVersion":"1.2"}
我的问题是 apis
数组是空的。
我的控制器class具有以下结构
@Api(value= "path", description = "Description")
@Controller
public class MyController {
public static final String URL_1 = "/url1";
public static final String URL_2 = "/url2";
@Autowired
private SomeService service;
@Autowired
private SomeRepository repository;
@Autowired
private SomeConverter converter;
@RequestMapping(method = RequestMethod.POST, value = URL1)
public void nextTask(HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
Task task = getNextTask();
String taskAsText = converter.toTextHandledWithComputeNode(task);
writer.write(taskAsText);
}
@RequestMapping(method = RequestMethod.POST, value = URL_2)
@ResponseStatus(value = HttpStatus.OK)
public void taskResult(@PathVariable("id") String id) {
service.mark(id);
}
}
此外,我尝试在 class 声明之前添加 @RequestMapping("/path")
注释,但它对我没有帮助。
我的配置class
@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan(basePackages = {"com.my.controller"})
public class MVCConfig {
private SpringSwaggerConfig springSwaggerConfig;
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean //Don't forget the @Bean annotation
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.includePatterns(".*pet.*");
}
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"My Apps API Title",
"My Apps API Description",
"My Apps API terms of service",
"My Apps API Contact Email",
"My Apps API Licence Type",
"My Apps API License URL"
);
return apiInfo;
}
}
你能帮我解决这个问题吗?
将您的包含模式更改为
.includePatterns(".*url.*");
应该可以解决您的问题。问题是您没有任何包含单词 pet 的请求映射。