Spring Cloud Gateway-自定义过滤器-从ServerWebExchange访问请求正文时出错

时间:2020-01-29 12:13:03

标签: spring spring-boot spring-cloud spring-cloud-gateway

我在Spring Cloud Gateway服务中有一个身份验证过滤器,我想根据请求正文中提到的操作确定操作。

我尝试访问请求正文,如下所示-

private Mono<String> getOperation(ServerWebExchange exchange) {
  DefaultServerRequest defaultServerRequest = new DefaultServerRequest(exchange);
  return defaultServerRequest.bodyToMono(String.class).map(requestBody -> {
    ObjectMapper mapper = new ObjectMapper();
      Map<String, String> map = mapper.readValue(requestBody, Map.class);
      return map.get("operation");
  });
}

请求被链接。但是出现以下错误-

java.lang.IllegalStateException: Only one connection receive subscriber allowed.
    at reactor.ipc.netty.channel.FluxReceive.startReceiver(FluxReceive.java:276) ~[reactor-netty-0.7.8.RELEASE.jar:0.7.8.RELEASE]
    at reactor.ipc.netty.channel.FluxReceive.lambda$subscribe$2(FluxReceive.java:127) ~[reactor-netty-0.7.8.RELEASE.jar:0.7.8.RELEASE]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-common-4.1.27.Final.jar:4.1.27.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-common-4.1.27.Final.jar:4.1.27.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464) ~[netty-transport-4.1.27.Final.jar:4.1.27.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) ~[netty-common-4.1.27.Final.jar:4.1.27.Final]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

我在这里错过了什么吗?还有其他方法可以访问请求正文吗?

0 个答案:

没有答案