当前位置: 首页 > 知识库问答 >
问题:

来自发布服务器的反应器netty http状态

靳金鹏
2023-03-14

我不确定如何处理这个问题,http响应状态取决于我需要阅读的主体。我有这样的想法:

private NettyOutbound handleRequest(HttpServerRequest req, HttpServerResponse res) {
    Mono<String> body = req.receive().aggregate().asString(UTF_8);
    ...
    return res.status(status)
                .sendString(body, UTF_8);
}

private int status(String body) {
    ...
}

但为了获得阅读正文所需的状态,我看不到任何使用发布者提供的值的选项。我如何使其能够调用上面的方法,并在创建NetYoutBound时使用该状态

共有1个答案

陶健
2023-03-14

如果我理解正确,您正在尝试实现路由处理程序

我想下面的应该行得通

package hello;

import reactor.core.publisher.Mono;
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;
import reactor.netty.http.server.HttpServerRequest;
import reactor.netty.http.server.HttpServerResponse;

public class Application {
    
    private Mono<Void> handleRequest(HttpServerRequest req, HttpServerResponse res) {
        return req.receive().aggregate().asString().flatMap(body ->
                {
                    int status = status(body);
                    return res.status(status).sendString(Mono.just(body)).then();
                }
        );
    }

    private int status(String body) {
        return body.toLowerCase().equals("hello") ? 200 : 400;
    }

    public void startServer() {
        DisposableServer server =
                HttpServer.create()
                        .host("localhost")
                        .port(8080)
                        .route(routes -> routes.get("/hello", this::handleRequest))
                        .bindNow();
        
        server.onDispose().block();
    }

    public static void main(String[] args) {
        new Application().startServer();
    }
}

 类似资料:
  • 我正在尝试为Vertx web客户端编写一个包装器,以便使用reactivestreams中的Publisher从服务器加载响应正文: 此解决方案是不正确的,因为它通过调用以阻塞方式读取所有正文字节。 是否可以分块读取来自Vertx网络客户端的响应,并将其转换为发布者(或Rx可流动的)?

  • hprose 为发布服务提供了多个方法,这些方法可以随意组合,通过这种组合,你所发布的服务将不会局限于某一个函数,某一个方法,某一个对象,而是可以将不同的函数和方法随意重新组合成一个服务。 AddFunction 方法 AddFunction(name string, function interface{}, option ...Options) Service 该方法的用于发布一个函数(命名函

  • 下面尝试过,但是直到并且除非我使Acyah geShipmentIn绑定节点为空(删除释放ID="9.2"xmlns="http://schema.infor.com/InforOAGIS/2"xmlns: xs="http://www.w3.org/2001/XMLSchema")选择查询不获取值。

  • 我需要一种在java中记录这个XML响应的方法。当我从我的java发送请求时,这是返回的。我需要一种打印出响应描述的方法。 下面是我的java代码:

  • 我们最近将一些数据移植到MongoDB,现在正在考虑运行日常备份,最好是从cron作业,并将其中一个备份恢复到辅助mongo数据库。 我们的系统设置如下: 服务器1:开发mongo数据库 服务器2:两个mongo数据库,一个用于暂存数据,一个用于生产 服务器3:是我们运行所有cron作业/批处理脚本的地方 (我尝试了将用户名和密码连接到主机,但没有将用户名和密码连接到主机) 我收到以下信息: Mo

  • 我有一个反向代理设置与nginx。 如何将从后端服务器发送到nginx的http请求(包括头)记录到文件中? 也许nginx http代理模块中的某个指令可以帮助我做到这一点。 但我找不到任何有用的指示。