⭐ New Features
- Update throwable to SQLException #24337
- Update CORS support #24327
- Improve exception message in AopContext.currentProxy() #24321
- Trim line in LineInfo only once #24310
- Merge getCallableInterceptors and getDeferredResultInterceptors #24305
- Optimize SimpleAliasRegistry hasAlias implementation #24295
- Improve ExposeInvocationInterceptor exception message #24293
- Add ContentLength support for InputStreamResource created in ResourceHttpMessageConverter and ResourceDecoder #24292
- StringHttpMessageConverter addDefaultHeaders() should check media type for wildcard before setting it into headers #24283
- Add fast path for ClassUtils.hasMethod #24282
- Support headers with multiple values in ResponseStatusException #24261
- Remove quality parameter from chosen media type in WebFlux responses #24239
- Remove Content-* response headers before error handling in WebFlux #24238
- Reuse InputStream for ResourceRegionHttpMessageConverter #24214
- Un-deprecate PathResource (for java.nio.file.Path resolution in createRelative) #24211
- Simplify AdvisedSupport.removeAdvisor() #24205
- Add BeanPropertyRowMapper.newInstance(mappedClass, conversionService) #24195
- Short-circuit in AbstractBeanDefinition.equals() #24185
- Expose local address in reactive ServerHttpRequest #24174
- Improve exception message for mixed explicit and implicit aliases with
@AliasFor
#24168 - Hoist constant result of SerializableTypeWrapper.unwrap() out of loop #24167
- Add "application/*+xml" as supported media type to XML decoders #24164
- Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #24153
- Let UriUtils.encode…(…) methods optimize for sources without the need to be encoded #24152
- Add accessor for logPrefix in ClientResponse to allow tying a ClientRequest to a ClientResponse #24146
- Support variable resolution of wildcard types #24145
- WebTestClientExtensions.expectBody doesn't work for generic types #24142
- Add firstElement to CollectionUtils #24135
- Improve configuration API of ClientCodecConfigurer.CustomCodecs #24124
- Introduce BeanNameGenerator based on fully qualified class name #24114
- ContentDisposition cannot parse encoded filename with leading space #24112
- Add option to encode MultiValueMap of query params #24043
- AbstractMessageConverterMethodProcessor results in 406 with "Accept: /" when
@RequestMapping
produces condition determined the content type #23287 - Allow testing with any value for Content-Type and Accept header in MockHttpServletRequestBuilder #2079
🪲 Bug Fixes
- StringDecoder buffer leak related to maxInMemorySize limit #24339
- Cloning a WebClient.Builder instance does not copy strategiesConfigurers #24329
- SimpleKey contains invalid hashcode on deserialization when parameters include an enum #24320
- ServerSentEventHttpMessageReader does not respect maxInMemorySize and is always limited to 256k messages #24312
- Unsafe double-checked locking in SpelExpression#compileExpression #24265
- Ensure CORS processing does not add Vary header twice on async requests #24223
- Escape quotes in filename in ContentDisposition.Builder when charset not specified #24220
- ClassUtils.getInterfaceMethodIfPossible overhead in cached methods for SpEL key/condition expressions #24206
- ClientCodecConfigurer drops MultipartHttpMessageWriter.partWriters when mutated #24194
- Regression: annotation searches no longer handle exceptions #24188
- WebFlux may send incomplete response if the session persistence fails #24186
- Fix RSocketRequester Coroutines extensions #24166
- Regression: prototype
@ControllerAdvice
beans should not be cached #24157 - Ensure MvcUriComponentsBuilder generates correct URL from type-level mapping without leading slash #24143
- Annotation scanning in enclosing class hierarchy results in NoClassDefFound #24136
- ReadCancellationException does not play well with
onErrorContinue
#24125 - StringHttpMessageConverter lost a fix that assumed charset UTF-8 for "application/json" #24123
- Regression: default values for implicit aliases no longer honored in MergedAnnotations #24110
- Functional Bean Definition DSL for noarg functions #23395
📔 Documentation
- Docs should warn against split URL handling across handler mappings #24304
- [spring expression doc] symbolic logical operators #24276
- Fix example in RSocket docs #24245
- MappingJackson2MessageConverter: fix javadoc typo #24200
- Fix typos in DataBufferUtils Javadocs #24160
- TOC generated by asciidoc for core-beans.adoc is truncated #24132
- WebFlux documentation states incorrectly that BindingResult is supported after
@RequestBody
#22997
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium SR3 #24349
- Upgrade to Gradle build scan plugin 3.1.1 #24252
- Upgrade to nohttp plugin 0.0.4.RELEASE #24251
❤️ Contributors
We'd like to thank all the contributors who worked on this release!