gateway改写json参数报错
来源:10-3 编写Spring Cloud Gateway
慕雪7517967
2020-09-04
这是报错信息:
org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP POST "/" [ExceptionHandlingWebHandler]
Stack trace:
求大佬帮解答伊西哎
写回答
1回答
-
您好:
先说解决方案:
删除你代码中的com.example.gateway.filter.WebFluxWebConfig ,因为没什么用
修改你的AuthFilter,找到
private Mono<Void> readBodyAndModify(ServerWebExchange exchange, GatewayFilterChain chain, Integer bussinessId) { log.info("read json 1"); ServerRequest serverRequest = ServerRequest.create(exchange, HandlerStrategies.withDefaults().messageReaders());
修改为:
@Autowired private ServerCodecConfigurer codecConfigurer; private Mono<Void> readBodyAndModify(ServerWebExchange exchange, GatewayFilterChain chain, Integer bussinessId) { log.info("read json 1"); ServerRequest serverRequest = ServerRequest.create(exchange, codecConfigurer.getReaders());
3. 保留如下配置:
spring: codec: max-in-memory-size: 10MB
定位问题的过程:
初期我也很懵逼,因为这个问题百度一堆解决方案。我没有考虑是你的AuthFilter的代码问题,然后发现确实不管添加配置,还是自己写WebFluxWebConfig都无法解决问题。
于是我心想,难道是Spring Cloud Gateway的bug?然后找到了这个Pull Request,其实答案已经呼之欲出了,但由于我没有往你自己的AuthFilter方向考虑问题,所以稍微走了点弯路——我看到这个PR已经被合并了,Hoxton SR5已经解决了问题。
于是我心想,应该还是你的代码问题。然后我发现你的AuthFilter只要不初始化就没有问题,你甚至还写了一堆日志去定位。于是我就参照了https://github.com/spring-cloud/spring-cloud-gateway/issues/1658#issuecomment-678023793 这里的描述 ,解决了问题。
112020-09-04
相似问题