⭐ New Features
- Avoid unnecessary list creation and processing in
AbstractTestContextBootstrapper#35995 AbstractTestContextBootstrappershould resolveContextLoaderonly once #35994- Log
RetryExceptionfor@Retryablemethods #35983 - Consistently stop already started
Lifecyclebeans on cancelled refresh #35964 - Support timeouts in
@RetryableandRetryPolicy#35963 - Use
==instead ofinstanceoffor primitive array type checks #35962 - Introduce
MultiValueMapCollectorfor use with streams #35958 - Avoid package cycle caused by use of UriComponentsBuilder in ServletServerHttpRequest #35952
- Target type in Converter interface should be
@Nullable#35947 - Provide access to attempt count in
RetryListeneras well as callbacks for the initial attempt #35940 - DefaultHandshakeHandler should not log client faults on error level #35930
- Log warning when meta-annotation is ignored due to types not present in classpath #35927
- Revise
ApplicationContext#getId()nullability to non-null #35925 - Use concurrent set behind reactive
TransactionSynchronizationManager#registerSynchronization#35921 - Refine
AbstractKotlinSerializationHttpMessageConverter#canWrite#35920 - Register bean dependency for
Optionalinjection point as well #35919 - Change
canRead/canWriteoverrides toClassones inAbstractSmartHttpMessageConverter#35916 - Do not make HttpHeaders read-only in HttpEntity #35888
- Add WebFlux SSE support with GSON #35884
- Different ReactorNettyWebSocketSession call getId() may return the same value #35883
- Refine nullability of
Assert#noNullElements#35868 - Allow configuring default maxIdleTime on InMemoryWebSessionStore. #35866
- Refine
BindingReflectionHintsRegistrarwithObjectToObjectConverterhints #35847 - Add
resetCaches()method to general CacheManager interface #35845 - Enhance handleTypeMismatch error message in ResponseEntityExceptionHandler #35837
- Add support for package-private
BeanRegistrarin Spring AOT generated code #35803 - Use ExtendedServletRequestDataBinder/ExtendedWebExchangeDataBinder for functional request binding #35800
- Expose Collection on FragmentsRendering to facilitate Unit Tests #35775
- Improve i18n-support for NoResourceFoundException #35758
- Cache resolved singleton beans in injected
Providerinstance #35373
🐞 Bug Fixes
ContextConfigurationAttributes(Class)constructor incorrectly setsinheritLocationstofalse#36000- NullPointerException thrown from JdkClientHttpRequestFactory for null request header value #35996
- State inconsistency in LazyConnectionDataSourceProxy when connection settings fail #35980
- SubscriberInputStream#resume misuses parked thread reference #35978
- Shared EntityManager returned by AbstractEntityManagerFactoryBean cannot be advised by AspectJ interceptor #35974
- RestClient cannot make HEAD requests when the response declares gzip Content-Encoding #35966
- ServerRequestObservationContext(s) miss Propagator.Getter method implementation #35965
- Jackson used instead of kotlinx.serialization for more complex types #35960
- Strong locking in
ConcurrentReferenceHashMap#computeIfAbsentmay cause context initialisation deadlock #35944 - BridgeMethodResolver change in 6.2.13 breaks Spring Data entity introspection #35936
- DefaultMessageListenerContainer does not clear Session and MessageConsumer for paused invokers #35932
- Tighten cacheable decision behind
@Lazyinjection point #35917 - AOT-generated bean definition does not consider name of
RuntimeBeanReferenceusing name and type #35913 - Accidental fallback match for Collection-type beans due to
@Bean-level qualifier annotation #35908 SingletonSuppliershould be defensive againstsingletonInstance/initializedvisibility mismatch #35905- SortedResourcesFactoryBean does not accept non-existent resources anymore #35895
- Support reading unresolvable types in
AbstractJacksonHttpMessageConverter#35889 - Refine Kotlin Serialization codec type checks #35885
- UrlHandlerFilter also removes query parameters and fragment when using HTTP redirect #35873
- Fix handling of
ServerSentEventwith Jackson encoder #35872 @EnableResilientMethodsdoes not participate in globally enforced target class proxying #35863- RestTestClient can leak HTTP connections when no body expectations are performed #35784
- Use provided ReactiveAdapterRegistry in BindingContext constructor #35771
- PathMatchingResourcePatternResolver fails with URI in JAR manifest Class-Path entries #35682
📔 Documentation
- Correct link to Reactive Libraries in reference docs #35970
- Document that annotations are ignored if attributes reference types not present in the classpath #35959
- Remove JUnit 4 based meta-annotation example #35903
- Refer to "Spring Tools" instead of "Spring Tools for Eclipse" in reference manual #35901
- Document that
SpringExtensionrequires JUnit Jupiter 6.0 or higher #35900 - Fix broken Javadoc links to methods #35899
- Clarify JMS
sessionTransactedflag for local versus global transaction #35897 - Reference docs should not use obsolete "junit5" links #35892
- Testing chapter references nonexistent Dependency Management documentation #35890
- Wrong interface in WebFlux Documentation page for API Version #35887
- Update reference documentation to use Jackson 3 #35886
🔨 Dependency Upgrades
- Upgrade to json-path 2.10.0 #35924
- Upgrade to Micrometer 1.16.1 #35984
- Upgrade to Reactor 2025.0.1 #35985
❤️ Contributors
Thank you to all the contributors who worked on this release:
@JohnNiang, @Pankraz76, @florianhof, @ivonaest, @izeye, @jnizet, @ngocnhan-tran1996, @remeio, and @zamzterz