问题标签 [java-vertx-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
275 浏览

java - OpenApi 生成器 java-vertx-web 把业务逻辑放在哪里

我正在尝试使用 java-vertx-web yaml 到代码生成器。生成过程工作正常,我得到了target/generated-sources/openapi/src/gen/java/main/org/openapitools/vertxweb/server/api.

有文件称为:

在 TestApiImpl 中,每条路由都有一个存根方法“未实现”,这是预期的。

现在我认为正常的过程是在我自己的项目文件中创建扩展这些 TestApiImpl 文件并在其中编写我自己的业务逻辑,以便它们处于源代码控制中。

但是当我这样做时,我无法将那些新实现的类重新注入到生成的服务器中,这样当调用路由时不会调用存根方法,而是调用我的真实实现。

覆盖这些生成的 Impl 类中的逻辑对我来说毫无意义,因为这个目标文件夹不在源代码管理中,并且每次我重新生成我的 API 时,这些文件都会被覆盖。

我错过了什么?

0 投票
1 回答
651 浏览

scala - Vertx Web:如何跨多个文件拆分和组织路由?

到目前为止,我真的很喜欢 Vertx。文档很棒,跨语言支持也很棒。

但是,针对我的具体问题的示例和文档似乎都已过时。我想 API 已经发生了一些变化3.4.x(我目前正在使用3.9.1Scala 2.13.1

我希望能够将我的路线拆分到多个文件中,以使事情井井有条。例如,我想要一个UserRoutes文件,并为 . 创建一个单独的文件TodoRoutes,这两个文件都可以在我的ServerVerticle.

我发现这样做的唯一方法基本上是:

用户路线:

服务器垂直:

我真正想做的是:

我更喜欢这个的原因是因为这样更容易确切地看到正在做什么UserRoutes,例如正在使用什么路径,需要什么参数等。

我尝试对这个示例应用程序采用类似的方法,但显然这对于​​ Vertx API 是不可能的,因为它存在于3.9?

做这个的最好方式是什么?我错过了什么?大型 REST API 如何分解它们的路由?

0 投票
1 回答
219 浏览

java - 无法使用 vertx-web 从类路径提供静态资源

vertx-web 文档说可以从类路径提供静态资源,我在论坛/帮助线程中阅读的所有内容似乎都证实了这一点。不幸的是,我似乎无法让它工作。

checkServerHasStarted通过,但其他两个以 . 失败404。这里有两个资源文件:

  • src/main/resources/router-root.txt
  • src/main/resources/io/vertx/starter/router-package.txt

我已经确认这些文件存在于 fat jar 的相对路径中。

理想情况下,我想从另一个包(java 项目)中包含这些资源,但首先要做的是。

我需要对我的路线做些什么来让其中一个失败的测试通过吗?我刚刚开始使用 Vert.x,所以我认为我的设置在某个地方很愚蠢。

完整项目:https ://github.com/drkstr101/vertx-static-example

干杯,并提前感谢任何指导!

编辑

我意识到有一种StaticHandler.create接受 a的形式ClassLoader,并且很可能是如何去做的。但是,从我读到的内容来看,这不是必需的,并且还有一个关于在下一个版本中删除该功能的弃用警告。我可以假设一旦该功能被弃用,来自类路径的服务资源将完全正常工作吗?

0 投票
1 回答
164 浏览

java - Vert.x:如何将 Verticle 隔离到专用事件循环?

在我的 java 应用程序中,我使用vertx-web 3.9.3创建一个 Web 服务器,用于托管一个 Web 应用程序和一些 REST API 端点。Web 应用程序是关键任务,但是,其余的 api 只是一个不错的选择。

因此,我将 web-app 和 rest api 部署为两个 verticles - 每个都在不同的端口上启动一个单独的 http 服务器,希望它们之间有一个明确的分隔,以便如果 rest api 出错,例如挂起事件循环线程,它不会影响我的关键任务网络应用程序。

事实证明并非如此。在我看来,我无法控制将哪个事件循环分配给给定的verticle。虽然在分配事件循环时似乎有一个循环策略,但如果有足够的 Verticle,它们中的一些最终将开始共享同一个事件循环(以我无法确定性控制的方式)。

在vertx中是否可以将一个verticle保持在一个孤立的环境中?是否可以再创建一个 Vertx 实例,是否可以实现分离?

0 投票
1 回答
312 浏览

vert.x - vertx 4.0.3 中的请求参数验证

vertx-Web-api-contracts在 vertx 3.0 中使用来验证我的查询参数和表单参数

HTTPRequestValidationHandlerParameterTypeValidator

代码示例:

在这里,我使用 ParameterTypeValidator 提供自定义逻辑来验证我的参数值。我正在使用 customTypeValidator,因为我需要对 ex 的参数值进行自定义值验证。我需要验证我的 ID 参数应该包含由_分隔的四个部分(part1_part2_part3_part4

现在,当我尝试迁移到vertx 4.0并被vertx-Web-api-contracts弃用时,我被迫使用vertx-web-validation,但是 web-validation 缺少像 api-contract-validations 这样的 custompropertyvalidation。

我想怎么做,

但我想知道如何传递/构建自定义模式,而不是使用自定义逻辑进行验证stringSchema()intSchema()早些时候我正在创建自定义类并实现 ParameterTypeValidator 以提供自定义验证逻辑(如IdTypeValidator())。

有什么方法可以通过网络验证实现相同的目标。

0 投票
0 回答
127 浏览

vert.x - vertx 组合期货并在发生故障时结束响应

vertx 组合期货并在发生故障时结束响应。
一个请求想要执行以下步骤

  1. 从 mongodb 查询一个文档
  2. 检查它是否有字段名称。如果它有该字段,则以状态码 409 结束响应
  3. 如果没有字段名,则调用异步 api 来获取 JsonObject
  4. 从 JsonObject 获取一个字段并用它更新第一个文档中的字段名称

我希望在链的中间结束响应,但发现这两个 onFailure 处理程序将被执行。

(版本:Vert.X 4.1)

0 投票
1 回答
70 浏览

httpresponse - 带有二进制数据的 Rest API GET 响应

我正在研究 Restful API,在内存中我们有一个 Json 格式的对象,客户需要下载这个 zip 文件格式的 json 对象。

现在我使用 Vertx 来实现这个 GET 响应,响应需要返回一个 ZIP 格式的二进制数据,基本上如下所示,

我不知道如何用 Vertx routingContext 实现它,有人可以给出点或一些示例代码来实现它吗?

0 投票
0 回答
28 浏览

docker - Vert.x Web 应用在 Docker 容器中运行时抛出 IllegalStateExceptions

我有一个用作简单 Web 服务器的 Vert.x Web 应用程序。Verticle的start()方法如下:

该服务运行良好,可以毫无问题地显示静态内容——直到我将其放入 Docker 容器中。

当我将应用程序作为 Java jar 文件运行时:

并使用以下 URL 运行浏览器:

http://localhost:8099

索引页面显示没有问题,并且还显示了指向其他页面的任何链接。

但随后,我使用以下 dockerfile 将 JAR 文件放入 Docker 容器中(当然是在停止服务器之后!):

创建映像(称为 webserv:1.0.0)后,我在 docker 中运行应用程序:

并在同一浏览器上使用相同的 URL:

http://localhost:8099

我得到以下失败:

此故障持续发生。

我是否在 Vert.x 的 Http1xServerResponse 类中发现了一个错误,导致它在 Docker 容器中时失败?或者 Docker 中有什么东西会导致多个请求到达同一个路由?有没有其他人将 Vert.x 应用程序放入 Docker 容器并看到这种行为?

有没有办法(一些配置、代码更改或其他方法)使 Vert.x Web 应用程序在 Docker 容器中正常工作?为什么 Vert.x Web 应用程序可以正常工作,但放在 Docker 容器中时突然抛出 IllegalStateExceptions?

有人请帮助解决这个问题。