Spring Boot 2.2.1以降でWebClientを利用して巨大なResponseを受け取るとDataBufferLimitException が発生する
Spring Boot 2.2.1 (Spring 5.2.1) から、WebClientで256KBを超えるJsonを扱うと DataBufferLimitException が発生するようになりました。Spring 5.1.11 以降でも発生すると思います。 (こっちは自分で試していません)
issueはこちら になります。詳細は公式リファレンスを参照ください。 多分このcommitによるものだと思います。
対策として、application.ymlの設定でデフォルトのサイズを変更することができます。これが一番簡単でオススメ。
spring.codec.max-in-memory-size: 2MB
https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
WebClient作成時に設定することもできます。
val webClient = WebClient.builder() .exchangeStrategies { builder -> builder.codecs { it.defaultCodecs().maxInMemorySize(2 * 1024 * 1024) } } .build()
また、Spring Boot 2.2.2 (Spring 5.2.2) では mutate methodを使って再設定することができます。commitはこちら
val webClient = WebClient.builder() .exchangeStrategies( ExchangeStrategies.withDefaults().mutate().codecs { it.defaultCodecs().maxInMemorySize(2 * 1024 * 1024) } ) .build()
ただし、issueを読む限りcloneとmutateは現状の問題を解決するための一時的な処置で、future releaseではなくなる可能性があるため注意する必要がありそうです。(英語読解に多大な不安があるので間違っているかもしれません)
大抵の場合デフォルトで十分ですが、レガシーなAPIとかで巨大なJsonを返してくる場合はカスタマイズが必要になります。commitを見る限りProtocol Bufferなどでも同様にLimitがあるみたいなので注意が必要です。