⭐ New Features
- Enhance DefaultResponseErrorHandler to allow logging complete error response body #27552
- Include correct keyword in CookieAssertions failure messages #27550
- Use Arrays.hashCode() in ByteArrayResource.hashCode() #27544
- Allow default CacheAwareContextLoaderDelegate configuration via a system property #27540
- Invoke bean-derived (Auto)Closeable.close() method directly #27504
- Defensive reference to JNDI API for JDK 9+ (optional
java.naming
module) #27483 - DefaultMessageListenerContainer does not log an error/warning when consumer tasks have been rejected #27451
- Provide accessor on externallyManaged RootBeanDefinition attributes #27449
- Allow to avoid class validation in
CglibAopProxy
viaProxyFactory
#27439 - Add support for non-public record declarations #27437
- Emit WebClientResponseException for malformed HTTP response #27262
- DatabasePopulatorUtils.execute should commit if the current Connection has auto-commit set to false #27008
🐞 Bug Fixes
- CronTrigger uses new Date() instead of context's Clock #27546
- Performance impact of con.getContentLengthLong() in AbstractFileResolvingResource.isReadable() downloading huge jars to check component length #27541
- Performance impact of ResourceUrlEncodingFilter on HttpServletResponse#encodeURL #27538
- UriTemplateRequestEntity doesn't override hashCode() and equals() #27531
- DataBufferUtils.write loses context #27517
- Avoid duplicate JCacheOperationSource bean registration in <cache:annotation-driven /> #27499
- Proxy generation with Java 17 fails with "Cannot invoke "Object.getClass()" because "cause" is null" #27490
- MediaType.sortBySpecificityAndQuality throws java.lang.IllegalArgumentException: Comparison method violates its general contract #27488
- Leading whitespaces are removed while reading SSE response #27473
- Non-escaped closing curly brace in RegEx results in initialization error on Android #27467
- ConcurrentReferenceHashMap's entrySet violates the Map contract #27454
- Avoid early ConversionService determination in StandardBeanExpressionResolver #27446
- Spring Framework >= 5.3.8 ASM ClassReader fails to parse class file due to InputStream optimization #27429
- StringUtils.collectionToDelimitedString(?) fails with NullPointerException when the collection contains null #27419
- Spring HATEOAS results in 406 with Kotlin Coroutine and ResponseEntity in WebFlux #27292
📔 Documentation
- Remove remark about missing caching API. #27501
🔨 Dependency Upgrades
- Upgrade to JUnit 5.8.1 #27450
- Upgrade to Reactor 2020.0.12 #27527
- Upgrade to SmallRye Mutiny 1.1.1 #27555
❤️ Contributors
We'd like to thank all the contributors who worked on this release!