我正在用vertx web运行gradle构建。我的库依赖项包括
// for mock API serving https://mvnrepository.com/artifact/io.vertx/vertx-core
compile group: 'io.vertx', name: 'vertx-core', version: '3.5.3'
compile group: 'io.vertx', name: 'vertx-web', version: '3.5.3'
所以在我时髦的脚本代码中,我这样做
Vertx vertx = Vertx.vertx()
HttpServer server = vertx.createHttpServer()
...
然后,我声明一个路由来捕获资源上的所有请求,并处理该请求并形成一个响应—尽量保持简单—只需返回简单字符串作为响应
Router allRouter = Router.router(vertx)
allRouter.route ( "/api/now/table/incident")
.handler(BodyHandler.create())
.blockingHandler { routingContext ->
def request = routingContext.request()
HttpMethod method = request.method()
def response = routingContext.response()
response.putHeader ("content-type", "text/plain")
def uri = routingContext.request().absoluteURI()
switch (method) {
case HttpMethod.GET:
println "processing a resource GET on uri : $uri "
response.end ("(GET) howdi will")
break
case HttpMethod.POST:
String bodyEnc = routingContext.getBodyAsJson().encodePrettily()
println "processing a resource POST on uri : $uri"
println "post request received post data : " + bodyEnc
response.end ("(POST) howdi will")
break
}
}
我为BodyHandling创建了一个处理程序,在路由中的一般处理程序之前。
然后我用路由启动服务器
server.requestHandler(allRouter.&accept)
server.listen(8081, "localhost")
对于邮递员的get请求,一切正常。
当我使用带有请求正文数据的post请求时(服务挂起,我必须取消),它永远不会到达switch语句。当我发布帖子时,控制台中发生的所有事情是
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 32768
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16
23:30:16.455 [vert.x-eventloop-thread-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
23:30:16.478 [vert.x-eventloop-thread-1] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.bytebuf.checkAccessible: true
23:30:16.482 [vert.x-eventloop-thread-1] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@51d486
这是最接近相关主题的,请在此处输入链接描述
我已经尝试了无数的方法,现在,当我得到它等时,在请求内设置body Handler-无法让它工作。
我的postman帖子如下所示-其中标题设置为内容类型application/json,内容长度为296字节(utf16中的字节长度),Accept为text/plain以接收简单响应
请问有谁确切地知道在使用vertx web时应该如何获得请求的post数据
似乎我的问题是发送的字节大小。我已经将reqBody字符串的字节计算为296字节(使用UTF16字符集),并将其设置到Postman请求中。
所以vertx服务器在处理正文时试图读取这么多并挂起。当我刚刚执行reqBody.getBytes(). size-有效地是UTF8时,它返回了147个字节。当我在postman中将内容长度更改为this时,它开始工作。
设置BodyHandler时存在时间问题。我尝试过这是在开关情况下,它失败了,请求已被读取。
然而,这两者似乎都没有成功。
选项1:“在路由(路径)调用之前创建正文处理程序”
allRouter.route().handler(BodyHandler.create())
//now try and setup the route for API path interception
allRouter.route ( "/api/now/table/incident")
.blockingHandler { routingContext -> ...
选项2:“链接处理程序,但首先放置身体处理程序”
//now try and setup the route for API path interception, followed by body handler
allRouter.route ( "/api/now/table/incident")
.handler(BodyHandler.create())
.blockingHandler { routingContext ->...
这是设置内容长度,假设内部字节大小为UTF16,这才是真正的问题。现在回到我开始做的事情。
我试着体验SmallRye Mutiny Vertx绑定,完整的示例代码可以在我的Github上找到。 当装配这样的路线时。 将阻止请求。
但我想知道是否有一种方法可以先定义公共处理程序,然后一些路由可以定义另一个处理程序。谢谢
我有10条骆驼路线如下所示:
我有一个关于CompletableFuture方法的问题: JavaDoc的意思是: 返回一个新的完成阶段,当此阶段正常完成时,将使用此阶段的结果作为所提供函数的参数来执行该阶段。有关异常完成的规则,请参阅完成阶段文档。 穿线呢?这将在哪个线程中执行?如果未来由线程池来完成呢?
在执行Cassandra操作(批量执行-在两个表上插入和更新操作)时,我收到“所有主机都尝试查询失败-com。数据。驱动程序。核心。操作时间异常”错误。 群集信息: 卡桑德拉 2.1.8.621 |DSE 4.7.1 火花-卡桑德拉-连接器-java_2.10 版本 - 1.2.0-rc1 | 卡桑德拉驱动器核心版本 - 2.1.7 火花 1.2.1 |Hadoop 2.7.1 = 在搜索它的解决
我正在使用一个Selenium/JUnit测试环境,我想实现一个类来执行“软断言”:这意味着我想让它记录断言是否通过,但在明确地告诉它验证断言之前,测试用例不会失败。这样,我可以检查页面上的多个字段,记录所有不匹配的字段。 我的“Verify”方法如下所示(/也存在类似的方法): 一旦验证了所有字段,我就调用以下方法: 目前,我只是使用来快速使测试用例失败;然而,这会使日志变得杂乱无章,导致一个无