标签: springdoc-openapi-ui

Swagger OpenAPI 3.0 - Springdoc - GroupedOpenApi 无法在 Spring MVC 中工作

我的应用程序是 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 spring-mvc openapi springdoc-openapi-ui

8
推荐指数
1
解决办法
2万
查看次数

我已经使用 springdoc 安装了 OpenAPI 3,但 URL 很奇怪。我可以将其更改为预期值吗?

我已经使用 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?

springdoc springdoc-openapi-ui

8
推荐指数
2
解决办法
6万
查看次数

@Parameter(required = false) 在 swagger open api v3 中不起作用

我的项目是 java spring boot 2 和 maven 。我使用 springdoc-openapi-ui 依赖项。问题是 @Parameter(required = false) 不适用于我的 api 参数。 在此输入图像描述

在此输入图像描述

java maven swagger-ui spring-boot springdoc-openapi-ui

8
推荐指数
1
解决办法
2万
查看次数

Spring Boot Openapi 复合模式(继承)

我有一个抽象类和其他三个子类。我想要这三个子类作为 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)

java spring-boot openapi springdoc-openapi-ui

8
推荐指数
0
解决办法
2221
查看次数

Springdoc GroupedOpenApi 不遵循使用 OperationCustomizer 设置的全局参数

用于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)

实际产量

实际产量

预期输出

预期输出

解决方法

添加要在应用程序属性文件中包含/排除的路径可以解决该错误。但代码级别的一些东西将非常感激。

spring-boot springdoc springdoc-openapi-ui

7
推荐指数
1
解决办法
8686
查看次数

Springdoc Openapi - 添加响应示例值

我正在尝试将示例响应值添加到我的 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)

java swagger spring-boot openapi springdoc-openapi-ui

7
推荐指数
1
解决办法
6410
查看次数

如何在 Spring Boot 中使用 OpenAPI 3 隐藏“响应”和“请求正文”中的“架构”?

有什么办法可以隐藏和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)

java swagger-ui spring-boot openapi springdoc-openapi-ui

7
推荐指数
1
解决办法
5770
查看次数

启用 /oauth/token 端点 springdoc-openapi-ui

我正在从 升级springfox-swagger2springdoc-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)

spring-boot spring-security-oauth2 springdoc-openapi-ui

6
推荐指数
1
解决办法
3879
查看次数

无法再使用 spring webflux 访问 swagger UI

我的 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

6
推荐指数
1
解决办法
4367
查看次数

如何控制 Springdoc OpenAPI 3.0 中的标签顺序?

我正在从 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)

所需订单:

  • 分页端点
  • 用户访问
  • 标记
  • 标记 - 管理员
  • 用户管理
  • 用户管理 - 管理员

实际订单:

  • 用户访问
  • 标记
  • 分页端点
  • 标记 - 管理员
  • 用户管理 - 管理员
  • 用户管理

POM 依赖关系:

        <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)

应用程序.yml:

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)

java openapi springdoc-openui springdoc-openapi-ui

5
推荐指数
1
解决办法
8737
查看次数