DataBufferLimitException: Exceeded limit on max bytes to buffer webflux eroor

匆匆过客 提交于 2020-06-27 07:41:05

问题


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

  1. 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();
    }
    
  2. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!