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

从ServerHttpRequest/Flux获取请求正文字符串

潘璞瑜
2023-03-14

我使用的是spring boot Version-2.0.6.Release和spring cloud Version-finchley.sr2

@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    ServerHttpRequest request = (ServerHttpRequest) exchange.getRequest();
    String s = resolveBodyFromRequest(request);
     /* s comes out to be "" */
    return chain.filter(newExchange);


}



private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest){
    //Get the request body
    Flux<DataBuffer> body = serverHttpRequest.getBody();
    StringBuilder sb = new StringBuilder();

    body.subscribe(buffer -> {
        byte[] bytes = new byte[buffer.readableByteCount()];
        buffer.read(bytes);
        DataBufferUtils.release(buffer);
        String bodyString = new String(bytes, StandardCharsets.UTF_8);
        sb.append(bodyString);
    });
    return sb.toString();

}

共有1个答案

岳出野
2023-03-14

您可以使用ModifyRequestBodyGatewayFilterFactory,我相信它包含在Spring Cloud Gateway2.0.2中,它是Finchley的一部分。

对于例如:

@Override
public GatewayFilter apply(Config config) {
   return (exchange, chain) -> {
        ModifyRequestBodyGatewayFilterFactory.Config modifyRequestConfig = new ModifyRequestBodyGatewayFilterFactory.Config()
                .setContentType(ContentType.APPLICATION_JSON.getMimeType())
                .setRewriteFunction(String.class, String.class, (exchange1, originalRequestBody) -> {
                    String modifiedRequestBody = yourMethodToModifyRequestBody(originalRequestBody);
                    return Mono.just(modifiedRequestBody);
                });

        return new ModifyRequestBodyGatewayFilterFactory().apply(modifyRequestConfig).filter(exchange, chain);
    };
}
 类似资料:
  • 问题内容: 我正在将带有JSON正文的POST请求发送到Django服务器(相当标准)。在服务器上,我需要使用进行解码。 问题是如何获取字符串格式的请求正文? 我目前有以下代码: 但是,这给出了一个错误。 如何以正确的编码将请求的主体作为字符串检索? 问题答案: 请求主体,是一个字节字符串。在Python 3中,将仅接受unicode字符串,因此您必须先进行解码,然后再将其传递给。 在Python

  • 希望在Spring API网关上实现一个代理来记录请求/响应。我为传入的请求和传出的响应定义了自己的过滤器。 请求网关筛选器: 没有一个工作... 有什么想法或可能的方法来解决这个“得到身体”的问题?

  • 我有一个csv文件如下: 我想在请求正文中将搜索条件作为json发布,并准备了以下代码作为gatling场景,但它不起作用——由于正文中的json不正确,我收到了400个状态代码: 当我将json从csv文件转换为body语句(如上所述)时,它可以工作:

  • 他们在vertx网站上的文档不太清楚如何接收请求的正文。 我得到错误: 如果他们甚至不把它放在他们的文件里,我怎么知道该怎么称呼它...

  • 我是Reactor编程新手,需要MONO/Flux方面的帮助 我有POJO课程 受雇者Java语言 我在访问服务时返回了Mono,我需要从Mono中提取名称作为字符串。 但这再次返回Mono而不是字符串。我需要从这个Mono中提取String值。

  • < li >最终目标: RestController的@ExceptionHandler中的日志请求正文字符串。 解释 默认情况下,当请求是无效的json时,springboot会抛出一个< code > httpmessagenoretreadableexception ,但该消息非常通用,并不包括具体的请求体。这使得调查变得困难。另一方面,我可以使用过滤器记录每个请求字符串,但是这样日志会被太