- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在按照 Oracle 本身的指南和教程构建基于 Helidon Microprofile 的微服务,但在使用注释时遇到了与“自动 OpenAPI 规范生成器”相关的问题。
我的 POM 包含 MP bundle 和集成,以使其与 Hibernate 提供的 JPA 配合使用。
即使在我的资源上设置了所有注释后,它也不会生成更新的规范。
POM
<dependencies>
<dependency>
<groupId>io.helidon.microprofile.bundles</groupId>
<artifactId>helidon-microprofile</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jandex</artifactId>
<version>2.1.1.Final</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-datasource-hikaricp</artifactId>
<version>1.4.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-jta-weld</artifactId>
<version>1.4.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-hibernate</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>2.2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.29.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
</dependencies>
我仅使用指南中指定的注释和 @OpenAPIDefinition 来定义诸如标题和许可证之类的内容。
资源
@OpenAPIDefinition(
info = @Info(
title = "Newsletter Microservice",
version = "1.0", description = "Microservice in charge of handling newsletter",
license = @License(name = "Apache 2.0", url = "https://www.apache.org/licenses/LICENSE-2.0"),
contact = @Contact(name = "Email", url = "mailto:email")
),
tags = {
@Tag(name = "public"), @Tag(name = "private")
}
)
@Path("/newsletter")
@RequestScoped
public class NewsletterClientResource {
日志
Connected to the target VM, address: '127.0.0.1:0', transport: 'socket'
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2019.12.02 20:01:19 INFO org.jboss.weld.Version Thread[main,5,main]: WELD-000900: 3.1.1 (Final)
2019.12.02 20:01:20 INFO org.jboss.weld.Bootstrap Thread[main,5,main]: WELD-ENV-000020: Using jandex for bean discovery
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jboss.weld.util.bytecode.ClassFileUtils$1 (file:/C:/Users/Brenno%20Fagundes/.m2/repository/org/jboss/weld/weld-core-impl/3.1.1.Final/weld-core-impl-3.1.1.Final.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of org.jboss.weld.util.bytecode.ClassFileUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2019.12.02 20:01:21 INFO org.jboss.weld.Event Thread[main,5,main]: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jersey.ext.cdi1x.internal.ProcessAllAnnotatedTypes.processAnnotatedType(@Observes ProcessAnnotatedType<?>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
2019.12.02 20:01:21 INFO org.jboss.weld.Event Thread[main,5,main]: WELD-000411: Observer method [BackedAnnotatedMethod] private io.helidon.microprofile.openapi.IndexBuilder.processAnnotatedType(@Observes ProcessAnnotatedType<X>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
2019.12.02 20:01:22 INFO org.jboss.weld.Bootstrap Thread[main,5,main]: WELD-ENV-002003: Weld SE container 404f642b-892f-4676-960e-8df848aee3a3 initialized
2019.12.02 20:01:22 INFO io.helidon.microprofile.security.SecurityMpService Thread[main,5,main]: Security extension for microprofile is enabled, yet security configuration is missing from config (requires providers configuration at key security.providers). Security will not have any valid provider.
2019.12.02 20:01:22 INFO io.smallrye.openapi.api.OpenApiDocument Thread[main,5,main]: OpenAPI document initialized: io.smallrye.openapi.api.models.OpenAPIImpl@7793ad58
2019.12.02 20:01:23 INFO io.helidon.webserver.NettyWebServer Thread[main,5,main]: Version: 1.4.0
2019.12.02 20:01:24 INFO io.helidon.webserver.NettyWebServer Thread[nioEventLoopGroup-2-1,10,main]: Channel '@default' started: [id: 0x4e1f119b, L:/0:0:0:0:0:0:0:0:7200]
2019.12.02 20:01:24 INFO io.helidon.microprofile.server.ServerImpl Thread[nioEventLoopGroup-2-1,10,main]: Server initialized on http://localhost:7200 (and all other host addresses) in 5254 milliseconds.
BUMP,此外,生成工作使用自定义过滤器和模型,META-INF 中的静态定义也可以工作。目前使用 JDK 13。
<小时/>编辑:这是蒂姆·奎因建议修改后我的应用程序类。
应用程序类
@ApplicationScoped
@ApplicationPath("/")
@OpenAPIDefinition(
info = @Info(
title = "Newsletter Microservice",
version = "1.0", description = "Microservice in charge of handling newsletter",
license = @License(name = "Apache 2.0", url = "https://www.apache.org/licenses/LICENSE-2.0"),
contact = @Contact(name = "Email", url = "mailto:john.doe@gmail.com")
),
tags = {
@Tag(name = "public"), @Tag(name = "private")
}
)
public class NewsletterApplication extends Application {
@Override
public Set<Class<?>> getClasses(){
HashSet<Class<?>> classes = new HashSet<Class<?>>();
classes.add(NewsletterClientResource.class);
return classes;
}
}
生成的文件
---
openapi: 3.0.1
info:
title: Generated API
version: "1.0"
paths: {}
最佳答案
布伦诺,
您没有显示更新的源代码,但我假设您已将 @OpenAPIDefinition
注释添加到快速入门 GreetResource
类中,对吗?
该注释的属性描述了整个应用程序,而不是其资源的子集,因此请尝试将注释移至 GreetApplication
类:
@ApplicationScoped
@ApplicationPath("/")
@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))
public class GreetApplication extends Application {...}
这应该有效。我刚刚在生成的 Helidon MP 快速入门示例源上尝试了此操作,重新构建,服务器返回了预期结果。
这是我所做的更改的差异:
diff --git a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
index fd140738..cca60da2 100644
--- a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
+++ b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
@@ -23,12 +23,15 @@ import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import io.helidon.common.CollectionsHelper;
+import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
+import org.eclipse.microprofile.openapi.annotations.info.Info;
/**
* Simple Application that produces a greeting message.
*/
@ApplicationScoped
@ApplicationPath("/")
+@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))
public class GreetApplication extends Application {
@Override
这里是从服务器返回的更新后的 OpenAPI 文档的开头:
---
openapi: 3.0.1
info:
title: QuickStart API
version: "1.1"
paths:
标题和版本已更改,如预期。
关于java - Helidon MP OpenAPI 未生成更新的 openapi 端点响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144114/
我们即将为我的客户端实现一个服务 API,它由许多服务组成,比如说 ServiceA、ServiceB 和 ServiceC。每个服务都可以随着时间的推移(独立地)引入新版本,而旧版本仍然存在。所以我
我正在使用 OpenAPI 3 并有两个查询参数,其中至少一个是必需的,但哪个无关紧要。 即,作为sudocode: if parameter_1 OR parameter_2: do stu
为了生成客户端库,我会在构建时获取 Quarkus 生成的 openapi yml 文件。 目前我发现获取它的唯一方法是运行服务器并从/q/openapi 端点获取它,但在这个过程中必须运行服务器只是
假设我有一个描述 API Foo 的 OpenAPI 3 文档,如下所示: openapi: 3.0.0 info: version: '1' title: Foo paths: /foo:
我正在使用 FastAPI,它允许 pattern=re.compile("(?P[42a-z]+)...") . https://editor.swagger.io/显示此模式的错误。 我的猜测是
我有一个 Spring boot Gradle 项目,我想获取它的 OpenAPI 规范 YAML 文件。 据我了解官方swagger-core不支持 Spring boot 项目,所以我找到了 sp
我正在尝试记录包含各种身份验证是可选的端点的现有 API。也就是说,如果用户获得授权,则返回的数据比未授权时返回的数据多。 无法在 OAspec v3 中明确找到。是否有编码技巧来定义这种情况? 我目
Here它说我可以引用另一个文件中单个路径的定义,但该示例似乎引用了整个文件,而不是 paths 下的单个路径定义。目的。如何在另一个文件的 paths 中分配单个路径目的? 例如,我有 Anothe
我在 SwaggerHub 注册并使用 OpenAPI 3.0 创建了一个新 API。在我的 API 中,/tasks path 有 2 个非必需参数,但我无法将它们设置为不需要 - 编辑器显示“不允
在 OpenAPI 3.0 Specification ,根OpenAPI Object有 servers属性是 Server Objects 的数组.和 Path Item Object还允许可选的
我想要做的是指定有时对 API 调用的响应可能是 PDF 文档,有时是 JSON。我想以 OpenAPI 3.0 格式执行此操作。对于 PDF,响应将如下所示: responses:
我正在编写一个返回 MP3 文件的 API YAML。我不熟悉多媒体响应。在通过 Google 时,我发现我可以使用 audio/mp3 内容类型。但我找不到任何例子来说明如何去做。我应该如何处理这种
我正在寻找一个 JS 库(最好能在浏览器中使用)来: 根据 OpenAPI 3.0 架构(YAML 或 JSON)检查特定的 JSON 负载(通常是来自 API 的响应) 使用从 OpenAPI 3.
我正在构建一个简单的 OpenAPI 3 YAML 规范,如下所示: paths: /query: get: parameters: - $ref: '#/co
与 draft-07 相比,它定义了: { "type": ["object", "boolean"], "properties": { ... "$r
我正在尝试使用 OpenAPI 3、YAML 来构建 API 定义。 我一直在使用文档 https://swagger.io/docs/specification/adding-examples/关于
我有一个 Open API 3 规范的 yaml 文件,它有一些 x- 前缀的属性。我正在尝试使用 openapi-generator-cli 生成一个 Angular Typescript SDK。
我目前正在按照 Oracle 本身的指南和教程构建基于 Helidon Microprofile 的微服务,但在使用注释时遇到了与“自动 OpenAPI 规范生成器”相关的问题。 我的 POM 包含
我必须从头开始创建一个rest api。通过手动完成大部分工作,我已经对 Jersey 有了一些经验。 我想现在就做,因为这个项目是新的。因此,我目前正在尝试每次尝试 openapi 3.0 在线编辑
我想将以下 JSON 表示为 schema在 OpenAPI 3.0 API 定义中: { get-question: { question-id:string } } 到目前为止,我已经写了
我是一名优秀的程序员,十分优秀!