问题
when i send a file et receive a array of byte i have alway a probleme with webflux to receive the array. the error thrown :
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
Do you now how to resolve that in webflux ?
回答1:
I suppose this issue is about adding a new spring.codec.max-in-memory-size configuration property in Spring Boot. Add it to the properties like:
spring:
codec:
max-in-memory-size: 10MB
回答2:
i was getting this error for a simple RestController (i post a large json string).
here is how i successfully changed the maxInMemorySize
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@Configuration
public class WebfluxConfig implements WebFluxConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html**")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
configurer.defaultCodecs().maxInMemorySize(16 * 1024 * 1024);
}
}
this was surprisingly hard to find
回答3:
Set the maximum bytes (in megabytes) in you spring boot configuration file like below:
spring.codec.max-in-memory-size=20MB
回答4:
This workerd for me
Create a bean in your one of the configuration class or the main Springbootapplication class
@Bean public WebClient getWebClientBuilder(){ return WebClient.builder().exchangeStrategies(ExchangeStrategies.builder() .codecs(configurer -> configurer .defaultCodecs() .maxInMemorySize(16 * 1024 * 1024)) .build()) .build(); }
Next go to your desired class where you want to use the webclient
@RestController / @Bean/ @Service public class PaySharpGatewayController { @Autowired WebClient webClient; public void test(){ String out = webClient .get() .uri("end point of an API") .retrieve() .bodyToMono(String.class) .block(); sysout(out) }
来源:https://stackoverflow.com/questions/59735951/databufferlimitexception-exceeded-limit-on-max-bytes-to-buffer-webflux-eroor