我的应用程序是 Spring MVC 无法启动。
我正在使用 springdoc-openapi-ui 1.4.4
另外,我将以下导入添加到我的 @configuration 类之一;
org.springdoc.core.SpringDocConfigProperties.class, org.springdoc.core.SpringDocConfiguration.class,
org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
org.springdoc.webmvc.core.MultipleOpenApiSupportConfiguration.class,
org.springdoc.core.SwaggerUiConfigProperties.class, org.springdoc.core.SwaggerUiOAuthProperties.class,
org.springdoc.webmvc.ui.SwaggerConfig.class, org.springdoc.core.CacheOrGroupedOpenApiCondition.class,
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class })
Run Code Online (Sandbox Code Playgroud)
并按如下方式实现 bean
@Bean
public GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("user")
.pathsToExclude("/api/v2/**", "/v2/**")
.pathsToMatch("/api/v1/**", "/v1/**")
.build();
}
@Bean
public GroupedOpenApi adminApi() {
return GroupedOpenApi.builder()
.group("admin")
.pathsToExclude("/api/v1/**", "/v1/**")
.pathsToMatch("/api/v2/**", "/v2/**")
.build();
}
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components())
.info(new Info()
.title("titleI")
.version("1.0.0"));
}
Run Code Online (Sandbox Code Playgroud)
但当我尝试时http://localhost:8080/MyApp/v3/api-docs/user
给我 404。
但我得到了列出的所有 APIhttp://localhost:8080/MyApp/v3/api-docs
也进来了http://www.onlykalu.com:81/MyApp/swagger-ui/index.html?configUrl=/MyApp/v3/api-docs/swagger-config
也没有定义下拉。
如果我添加
springdoc.group-configs[0].group=user
springdoc.group-configs[1].group=admin
Run Code Online (Sandbox Code Playgroud)
到 application.properties …
我已经使用 Java 项目的 pom 文件中的以下工件安装了 swagger-ui:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-security</artifactId>
<version>1.5.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我访问此 URL 时,我可以查看 RESTful 端点的 swagger ui
http://localhost:8081/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config
Run Code Online (Sandbox Code Playgroud)
但不是这个链接
http://localhost:8081/swagger-ui/index.html
Run Code Online (Sandbox Code Playgroud)
为什么是这样?如何将其改回预期的 URL?
我有一个抽象类和其他三个子类。我想要这三个子类作为 Swagger/OpenAPI 接口的示例。
但 Swagger/OpenApi 接口仅显示抽象类和第一个子类字段。
操作请求
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "subType", visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = InstallmentOperationRequest.class, name = "I"),
@JsonSubTypes.Type(value = CreditCardOperationRequest.class, name = "C"),
@JsonSubTypes.Type(value = SingleOperationRequest.class, name = "S")
})
@Schema(
description = "Parent operation request",
discriminatorProperty = "subType",
discriminatorMapping = {
@DiscriminatorMapping(value = "SingleOperation", schema = SingleOperationRequest.class),
@DiscriminatorMapping(value = "InstallmentOperation", schema = InstallmentOperationRequest.class),
@DiscriminatorMapping(value = "CreditCardOperation", schema = CreditCardOperationRequest.class)
})
public abstract class OperationRequest {
private String …Run Code Online (Sandbox Code Playgroud) 用于GroupedOpenApi定义 API 组时,添加到每个端点的通用参数集不存在于参数列表中。下面是各自的代码
@Bean
public GroupedOpenApi v1Apis() {
return GroupedOpenApi.builder().group("v1 APIs")
// hide all v2 APIs
.pathsToExclude("/api/v2/**", "/v2/**")
// show all v1 APIs
.pathsToMatch("/api/v1/**", "/v1/**")
.build();
}
Run Code Online (Sandbox Code Playgroud)
以及将标准标头添加到所有端点的类
@Component
public class GlobalHeaderAdder implements OperationCustomizer {
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod) {
operation.addParametersItem(new Parameter().$ref("#/components/parameters/ClientID"));
operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
List<Parameter> parameterList = operation.getParameters();
if (parameterList!=null && !parameterList.isEmpty()) {
Collections.rotate(parameterList, 1);
}
return operation;
}
}
Run Code Online (Sandbox Code Playgroud)
实际产量
预期输出
解决方法
添加要在应用程序属性文件中包含/排除的路径可以解决该错误。但代码级别的一些东西将非常感激。
我正在尝试将示例响应值添加到我的 springdoc-openapi swagger 文档中。
比如用“马克·吐温”替换“字符串”等。
我尝试使用此解决方案 - springdoc-openapi: How to add example of POST request?
我已经org.springframework.web.bind.annotation.RequestBody在我的课堂上使用了。
如果我用这个 -
@io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(examples = {
@ExampleObject(
name = "Person sample",
summary = "person example",
value =
"{\"email\": test@gmail.Com,"
+ "\"firstName\": \"josh\","
+ "\"lastName\": \"spring...\""
+ "}")
}))
Run Code Online (Sandbox Code Playgroud)
我得到以下解释 -
no viable alternative at input ',@io.swagger.v3.oas.annotations.parameters.RequestBody(content=@Content(examples={@ExampleObject(name="Person sample",summary="person example",value="{\"email\": test@gmail.Com,"+"\"firstName\": \"josh\","+"\"lastName\": \"spring...\""+"}")})))': NoViableAltException```
Can anyone give me a solution please?
Run Code Online (Sandbox Code Playgroud) 有什么办法可以隐藏和Schema零件吗?我们只需要展示。我们使用 OpenAPI 3。ResponsesRequest bodyExample Value
依赖关系:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我们可以通过在 application.properties 文件中使用来隐藏listed schema部分springdoc.swagger-ui.defaultModelsExpandDepth=-1。
但我们想从Request Body和中删除 API 模式部分Responses。
我尝试过content= @Content(schema = @Schema(hidden = true )),但它隐藏了整个请求正文/响应。
响应代码:
@ApiResponses({
@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(name = "Success response", example = "JsonResponse..."),
mediaType = MediaType.APPLICATION_JSON_VALUE)),
@ApiResponse(responseCode = "400", description = "BAD REQUEST", content = @Content(schema = @Schema(hidden = true)))
})
Run Code Online (Sandbox Code Playgroud)
请求正文代码:
@io.swagger.v3.oas.annotations.parameters.RequestBody(
content= @Content(schema = …Run Code Online (Sandbox Code Playgroud) 我正在从 升级springfox-swagger2到springdoc-openapi-ui. 我在前端使用 swagger 定义来自动生成类型。/oauth/token中缺少端点springdoc-openapi-ui。这是我的配置:
@Configuration
@OpenAPIDefinition(info = @Info(title = "title",
description = "description", version = "v1"))
@SecurityScheme(name = "security_auth", type = SecuritySchemeType.OAUTH2,
flows = @OAuthFlows(password = @OAuthFlow(
authorizationUrl = "${oauth.auth.url}",
tokenUrl = "${oauth.auth.url}/oauth/token", refreshUrl = "${oauth.auth.url}",
scopes = {@OAuthScope(name = "all", description = "all scope")})))
public class OpenApiConfig {}
Run Code Online (Sandbox Code Playgroud)
我有一个身份验证服务器,它是同一应用程序的一部分(与我的资源服务器共享相同的内容)pom.xml。身份验证服务器spring-security-oauth2如下:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private UserDetailsService userDetailsService;
@Autowired …Run Code Online (Sandbox Code Playgroud) 我的 springboot webflux 应用程序正在运行,我能够通过 url 访问 swagger ui:
http://localhost:8080/webjars/swagger-ui/index.html。
注意:对于我来说,Tomcat 使用端口初始化:8080 (http)
POM 包含以下依赖项
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
<version>1.6.13</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的主要java类如下
@OpenAPIDefinition(info = @Info(title = "APIs", version = "1.0", description = "Documentation OHM APIs v1.0"))
public class ReactiveApplication {
public static void main(String[] args) {
SpringApplication.run(ReactiveApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
突然之间,我无法再在之前工作的同一网址上访问 webflux swagger。
出现以下错误:
2023-01-05 13:49:36,906 WARN [http-nio-8080-exec-9] o.s.web.servlet.PageNotFound.noHandlerFound: No mapping for GET /webjars/swagger-ui/index.html
2023-01-05 13:49:36,907 …Run Code Online (Sandbox Code Playgroud) swagger-ui spring-boot spring-webflux springdoc springdoc-openapi-ui
我正在从 Springfox 3.0 切换到 OpenAPI 3.0 + Springdoc-openapi。
在 Springfox 中,标签顺序是按字母顺序排列的,但在 Springdoc 的 Swagger UI 中,顺序似乎是随机的。
如何控制 UI 上的标签顺序?我更喜欢自己选择的顺序,但也可以按标签名称的字母顺序排序。
@Tag(name = MY_CONTROLLER_TAG_NAME, description = MY_CONTROLLER_TAG_DESC)
public class MyController {
Run Code Online (Sandbox Code Playgroud)
<springdoc-openapi.version>1.6.4</springdoc-openapi.version>
...
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-security</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
springdoc:
show-actuator: ${SWAGGER_ENABLED:true}
swagger-ui:
doc-expansion: none
api-docs:
enabled: ${SWAGGER_ENABLED:true}
model-converters:
pageable-converter:
enabled: true
Run Code Online (Sandbox Code Playgroud) spring-boot ×7
java ×6
openapi ×5
springdoc ×3
swagger-ui ×3
maven ×1
spring-mvc ×1
swagger ×1