一、先提供解决思路:springboot框架中都大量的对缓冲区有对应的设置,如果光找maxInMemorySize 262144,去解决都不会找到有效的解决办法,因为最少我知道的sping在文件上传、表单提交,webclient发送等都有maxInMemorySize的限制。
所以要先找出出现这个问题是出自哪个类,debug方法,然后在类变量列表中找到对应的类调用的是哪个设置。
二、解决典型的几个地方maxInMemorySize的问题。
1、最期的springweb文件上传,可以直接在配置文件中:
multipart.max-in-memory-size=10MB 配置大小
2、如果使用表单提交报maxInMemorySize使用配置类来改参数:
@Configuration
public class DataBufferConfig implements WebFluxConfigurer {
@Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
configurer.defaultCodecs().maxInMemorySize(10*1024*1024);
}
}
3、如果webClient或SpringGateway上面转发修改webclient.builder设置:
private WebClient.Builder Builder (HttpClient httpClient) {
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
return WebClient.builder()
.clientConnector(connector)
.exchangeStrategies(ExchangeStrategies.builder()
.codecs(configurer -> {
CustomJsonDecoder decoder = new CustomJsonDecoder(ServerResponseFastJsonConfig.getObjectMapper());
configurer.defaultCodecs().jackson2JsonDecoder(decoder);
configurer.defaultCodecs().maxInMemorySize(MaxInMemorySize);
CustomJsonEncoder encoder = new CustomJsonEncoder(ServerResponseFastJsonConfig.getObjectMapper());
configurer.defaultCodecs().jackson2JsonEncoder(encoder);
}
)
.build()
);
}