⭐ New Features
- Do not cache multipart mime types in MimeTypeUtils LRU cache #24767
- Declare proxyBeanMethods=false in JmsBootstrapConfiguration #24752
- Usage of java 14 record throws java.lang.UnsupportedOperationException: This feature requires ASM8_EXPERIMENTAL #24722
- Non-public Kotlin beans can't be instantiated #24712
- Avoid ClassCastException for CoyoteInputStream in TomcatHttpHandlerAdapter #24707
- Avoid unnecessary sorting in AbstractHandlerMethodMapping #24704
- Improve performance of StringUtils#cleanPath #24674
- Optimize global advisor registration in ProxyFactoryBean #24669
- Short circuit check in SynthesizedMergedAnnotationInvocationHandler.isVisible() #24664
- Ignore empty domain string in ResponseCookie #24663
- Remove UTF-8 charset parameter from Content-Type in SseEmitter #24632
- Jaxb2XmlDecoder Does Not Throw Codec Exception For Invalid XML #24622
- TransactionInterceptor constructors should accept a generic TransactionManager #24612
- Relax GraalVM checks in DefaultParameterNameDiscoverer #24600
- Multipart/related support in Spring Webclient #24582
- Consider supporting PreFlight requests and CORS in Servlet Functional Endpoints #24564
- Support for byte-range requests in Servlet Functional endpoints #24562
- Provide a mechanism to configure integration tests with a dynamic property source #24540
- Improve ConcurrentLruCache performance #24469
- Reduce Class[] garbage when creating proxies #24221
- implements
checkNotModified
forServerRequest
#24173 - AbstractSockJsSession exception when handling message with closed session #23828
🪲 Bug Fixes
- Missing nullability declarations for package web.socket.server.jetty #24745
- MediaTypeNotSupportedStatusException seems unused #24743
- MessagingRSocket incorrectly tries to release entire input stream on channel interaction #24741
- MimeTypeUtils performance degradation #24671
- RSocket MetadataEncoder expands the routes incorrect #24656
- Spring generates huge callstack for async requests #24652
- CodecException (from JSON conversion) in RestController is not mapped to 400 but 500 (SB 2.2.5 & Kotlin) #24646
- addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24638
- ShallowETagHeaderFilter (still) overwrites ETag and Content-Length #24635
- Invalid JSON in requests now causes 500 instead of 400 #24630
- Invalid request results in 500 INTERNAL ERROR instead of 400 BAD REQUEST (with Lombok and Kotlin) #24610
- Distributions no longer deployed #24605
- UnknownHttpStatusCodeException is missing the response body #24595
- Implementing interface in abstract class does not expose parameter annotations #24127
📔 Documentation
- Clarify name generation responsibility for PropertySourceFactory implementations #24757
- Improve Javadoc in
@Configuration
#24753 - Improve Javadoc in AnnotatedElementUtils #24740
- Clarify behavior for WebClient statusHandlers #24736
- Enhance Spring Core documentation, section 1.9.2. Using
@Autowired
#24711 - Do not mention credentials as enabled by default in CorsRegistry #24691
- Improve Javadoc in AutoProxyRegistrar #24688
- Improve javadoc in RollbackRuleAttribute regarding nested classes #24682
- Fix typo in testing.adoc #24627
- Polish ReactorResourceFactory #24620
- Fix typo in reference manual #24597
- Add more lambda expressions in data-access code examples #24398
🔨 Dependency Upgrades
- Upgrade to JUnit 5.6.1 #24762
- Upgrade to Reactor Dysprosium SR6 #24725
- Upgrade to Groovy 2.5.10 (for JDK 14 compatibility) #24719
❤️ Contributors
We'd like to thank all the contributors who worked on this release!