⭐ New Features
- Refine the log message printed after restoration with CRaC #30876
- Add HttpExchangeAdapter for RestClient #30869
- Use latest version of
sockjs-client
inAbstractSockJsService
#30848 - ClientHttpRequestFactory based on Reactor Netty HttpClient #30835
- Pause/resume capability for
ThreadPoolTaskExecutor
andThreadPoolTaskScheduler
#30831 - Rearrange HttpHeader adapters #30823
- Support use of MockRestServiceServer with RestClient #30821
- Allow built ServerResponse to throw exception #30818
- Method validation error handling by controller method parameter type #30813
- Add
RestClient
Kotlin extensions #30807 - Detect interface parameter annotations also from spring-messaging HandlerMethod #30801
- Allows JdkClientHttpRequest.DISALLOWED_HEADERS to be customized. #30788
- Change restore logging to info level #30775
- Add MultipartFileArgumentResolver for HTTP interface client #30728
- Align KeyValues of Scheduled-annotated observability with OpenTelemetry conventions #30721
- Detect invalid transaction configuration for transactional event listeners #30679
- Blocking execution for WebFlux controller methods #30678
- Add a CoExchangeFilterFunction for WebClient similar to CoWebFilter #30650
- Built-in Web Support for Method Bean Validation #30645
- Spring MVC and WebFlux handling of method validation errors #30644
- HttpClient based ClientHttpRequestFactory #30478
- HTTP interface client infrastructure and adapter for RestTemplate #30117
- Instrument Scheduled-annotated methods for observability #29883
- Add AOT support for Kotlin constructors with optional parameters #29820
- Introduce RestClient #29552
- Space in integer request parameter neither triggers the default value nor generates a 400 #29550
- Improve 404 error handling in Spring MVC #29491
- Issue with
equals(?)
/hashCode()
forResolvableType.forRawClass(?)
#28608 - Introduce
ModuleResource
for resources loaded from a givenModule
#28507 ArrayToCollectionConverter
should default toList
if target type isCollection
#28048- ResolvableType should allow to determine matching type argument for generic return type #27748
- Parallel graceful shutdown for
ThreadPoolTaskExecutor
andThreadPoolTaskScheduler
#27090 - Support target instantiation and binding via constructor in DataBinder #26721
- Support for MultiValueMap elements in web data binding #26297
- Add binding support to functional servlet and reactive stack #25943
@Scheduled
methods in beans created by FactoryBeans are not cancelled #24629ExecutorConfigurationSupport
API refinement to control internal executor shutdown #24497- DataBinder using constructor parameter should use path variables #22748
- Add JDBC SqlValue classes for arrays #1850
- Support Kotlin parameter default values in HTTP handler methods #21139
- Multiple TaskSchedulers to be supported with
@Scheduled
[SPR-16271] #20818 - Let the DataBinder construct nested objects #20806
- Add support to any Iterable types on PropertyAccessor #907
🐞 Bug Fixes
- ScheduledAnnotationBeanPostProcessor fails without Reactive Streams on the classpath #30707
@SessionAttributes
handler invoked too early if controller method execution is deferred #30337- Fix AbstractMessageConverter not delegating to ContentTypeResolver when message header is null #29768
- JSON deserialization for Kotlin collections on inherited classes #24033
📔 Documentation
- Update documentation on customizing validation errors with MessageSource #30653
- Update documentation for method validation improvements in spring-context, Spring MVC, and WebFlux #30643
🔨 Dependency Upgrades
- Upgrade to Context Propagation 1.1.0-M3 #30882
- Upgrade to Kotlin 1.9.0 #30719
- Upgrade to Kotlin Coroutines 1.7.2 #30833
- Upgrade to Micrometer 1.12.0-M1 #30872
- Upgrade to Project CRaC 1.3.0 #30812
- Upgrade to Reactor 2023.0.0-M1 #30856
❤️ Contributors
Thank you to all the contributors who worked on this release:
@OlgaMaciaszek, @erichaagdev, @izeye, @kooixh, @ljtfreitas, @marschall, @mdeinum, @spencergibb, and @yoshikawaa