我想在 Swagger ui 中显示两个 REST API 端点:/cart 和 /post。
当我指定 /cart 或 /post 工作正常,但两者都显示错误为
规范中没有定义任何操作!
在 swagger-ui 中
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.ant("/cart"))
.paths(PathSelectors.ant("/post"))
.build();
}
另一种选择是使用 .paths(PathSelectors.any()) 而不是 .paths(PathSelectors.ant("/cart")) 和 .paths(PathSelectors.ant("/帖子”))
使用 Spring boot
2.6.x
,您还需要:
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
因为你使用了
AND
条件
public ApiSelectorBuilder paths(Predicate<String> selector) {
pathSelector = pathSelector.and(selector);
return this;
}
您可以使用
OR
子句来组合条件
.paths(PathSelectors.ant("/cart").or(PathSelectors.ant("/post")))
请将包 xxxx 添加为根包,以便它可以扫描所有类中的 swagger 配置
public String getApplicationBasePath() {
return swaggerPath;
}
}).select().apis(RequestHandlerSelectors.basePackage("xxxx")).build()
.securitySchemes(Arrays.asList(securitySchema()))
.securityContexts(Collections.singletonList(securityContext())).apiInfo(metaData());
这就是解决方案:添加控制器类所在的路径
示例: “org.zaid.aitfriha.controller.api”是您拥有控制器的路径
.apis(RequestHandlerSelectors.basePackage("org.zaid.aitfriha.controller.api"))
不要使用 org.zaid.* 或 org.zaid.aitfriha.* 或 org.zaid.aitfriha.controller.*
小心“/api/AbsenceRequest”不起作用,它必须是“/api/absenceRequest”
@RestController
@RequestMapping("/api/absenceRequest")
@CrossOrigin("*")
您可以尝试将基础包设置为 Swagger Config 类中的 RequestHandlerSelectors 对象。您可以指向添加了 OpenAPI 注释的特定包,即“控制器”,或者只是将其指向根,spring 将扫描所有嵌套的包。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo"))
.paths(PathSelectors.any())
.build().apiInfo(apiInfoMetaData());
}