我有一个小型Spring Boot微服务,它使用webflux将其endpoint公开为反应式。
当我运行应用程序从IntelliJ,Gradle或从cmd行与SpringDoc网络流量支持:实现'org.springdoc: springdoc-openapi-webflent-ui: 1.4.4'
和我去http://localhost:8080/swagger-ui.html
我得到一个500错误,日志显示:
java。lang.IllegalStateException:未找到接口组织的主构造函数或默认构造函数。springframework。http。服务器反应性。ServerHttpRequest]
根本原因是:
java。lang.NoSuchMethodException:org。springframework。http。服务器反应性。ServerHttpRequest。
如果我使用
http://localhost:8080/swagger-用户界面/索引。html?configUrl=/v3/api docs/swagger config
我得到的是404而不是500。
但是,如果我将依赖关系更改为非反应性SpringDoc模块:
实现组织。springdoc:springdoc openapi ui:1.4.4'
文档是可用的,它们只是不显示返回模式(我想这是预期的,因为响应被包装在
Mono
中)。
我已经研究过这个问题了但是没有帮助
我使用的是Spring Boot 2.3.3。在这个版本中,除了一个自动连接的服务类之外,我在控制器中没有什么“新奇”,endpoint只是用
GetMapping
注释并返回Mono
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springdoc:springdoc-openapi-webflux-ui:1.4.4'
对我来说,在kotlin spring boot项目中,问题在于endpoint返回通量,因此它抛出了一个优雅的异常:jackson BeanDescription。找不到findJsonValueAccessor,这可能导致结果不准确,请将jackson更新为2.9
来自@Chayne P.S.的方法解决了我的问题:
class OpenApiConfigiguration {
@Bean
fun configOpenAPI(): OpenAPI? {
ModelConverters.getInstance().addConverter(WebFluxSupportConverter())
return OpenAPI()
.info(Info().title("API")
.description("WS restful API")
.version("v0.0.1")
.license(License().name("License of API")
.termsOfService("Terms of service"))
.externalDocs(ExternalDocumentation()
.description("Docs")
.url(""))
}
}
我有一个限制,我需要通过Servlet 3.1使用网络流量,即使它不是纯粹的反应性解决方案,但我可以通过Servlet重用一些Spring Security过滤器。所以,我不能像@brianbro建议的那样删除sping-boo-starter-web。
因此,我找到了一个解决方案,使springdoc openapi ui能够读取通量
@Bean
public OpenAPI customOpenAPI() {
ModelConverters.getInstance().addConverter(new WebFluxSupportConverter())
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("JWE", new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWE")))
.info(new Info()
.title("Marketplace API")
.version(apiVersion))
}
所以,您只需要包括库。
implementation 'org.springdoc:springdoc-openapi-ui:1.4.6'
implementation 'org.springdoc:springdoc-openapi-webflux-core:1.4.6'
您的项目正在使用spring boot starter web和spring boot starter webflux。
您只需要从依赖项中删除SpringBootStarterWeb。
当使用与SpringDoc-OpenAPI捆绑的CSRF头时,是否有一种方法可以自动地将CSRF头包含到从swagger ui发出的请求中? springfox(GitHub)中似乎实现了类似的解决方案,但我没有找到关于是否可以用SpringDoc-OpenAPI实现这一点的信息。
例如: Swagger这样显示枚举: 我想要的是: API返回“显示名称”,然而,Swagger显示“枚举名称”,这经常导致混淆。有可能改变狂妄的价值观吗?
我是个傻瓜。我试图用swagger 2.0 yaml记录一个API,其响应如下 正如您所见,“type”的类型是string,“id”是integer,“name”是string。但是什么类型的“地理”呢?我本来打算把“object”类型放在这里,但似乎object类型只是一个json对象。 据该网站称,OpenAPI只支持这些类型的字符串(包括日期和文件)数字整数布尔数组对象
我使用和。我有一个带有方法的控制器,其中包含作为url参数的数组: 为什么会发生这种情况?为什么项目中没有显示示例数组?
我正在用Swagger创建一个API文档。我直接尝试了openapi 3.0。不知何故,我无法得到我的请求机构工作的描述。 但这些描述不会出现: 我想得到像《大摇大摆2》那样的东西。下面是如何将相同的代码转换为Swagger 2
我在一个带注释的对象中有几个枚举,如: 其中枚举定义为: 使用Openapi3,我可以生成一个swagger文档。我的问题是,和,翻译方式不同,如: 我希望< code>Enum2与< code>Enum1一样被记录,因此具有实际的枚举值。有什么方法可以强制这样做,或者解释为什么会这样?两个枚举基本上与示例中的相同。