⭐ New Features
- Provide default codecs config callback to custom codecs #24119
- Allow ExchangeStrategies customizations in WebClient #24106
- Cache result of String.getBytes() in ExtendedBeanInfo.PropertyDescriptorComparator #24095
- IOException "Closed while Pending/Unready" with WebFlux on Jetty #24060
- Avoid substring allocation in StringUtils.replace #24024
- Support for new MySQL 8 error code 3572 #23973
- WebClient retry() doesn't re-run filters #23909
🪲 Bug fixes
- NullPointerException in JSON codec parsing stream encoded with Jackson Smile #24076
- Revise AbstractBeanDefinition equals implementation #24054
- SqlRowSet accessor methods should be marked @nullable #24044
- ControllerAdviceBean.findAnnotatedBeans() finds proxies as well as their target beans, resulting in double registration #24018
- Ensure InstantFormatter can properly deserialize ISO-formatted dates #23993
- Allow schemaZip Gradle task to execute on MS Windows #23987
- Corrupted multipart + correct content-length lead to Flux hanging #23948
- ShallowETagHeaderFilter overwrites ETag #23941
- ResponseCookie to allow leading dot in domain name #23928
- Regression in spring-test's 5.2.1 MockCookie parse implementation #23920
- useSuffixPatternMatch ignored if pathPrefix is also used #23919
📔 Documentation
- TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #23997
- Different behavior when injecting beans from local @configuration class vs. external @configuration classes #23990
- DEFAULT_PHASE of SmartLifecycle interface has incorrect Javadoc #23964
- Correct Javadoc for WebMvcConfigurer#addInterceptors #23913
🔨 Dependency upgrades
- Upgrade to Reactor Californium-SR14 #24038