⚠️ Attention Required
- Log warning when default context configuration is ignored within test class hierarchies #36390
- Ignore flush calls on ServletServerHttpResponse body outputstream #36385
⭐ New Features
- Leverage
ResourceHandlerUtilsinScriptTemplateView#36458 - Restore
ScriptTemplateViewTests#36456 - Fix log message in
ConfigurationClassBeanDefinitionReader#36453 - DefaultResponseErrorHandler - setMessageConverters() not called via RestClient #36434
- Resolve context initializers only once in
AbstractTestContextBootstrapper#36430 - Invoke
resolveContextLoader()only once inAbstractTestContextBootstrapper#36425 - Further align synthesized annotation
toString()with modern JDKs #36417 - Introduce
setDefaultCharset()inAbstractResourceBasedMessageSource#36413 - Support for JPA 4.0 flush mode "explicit" #36401
- Support application-wide defaultHtmlEscape setting in WebFlux RequestContext #36400
- Support
Predicate<RequestPath>>in path API version resolver #36398 - Avoid duplicate flushes in HttpMessageConverter implementations #36383
- Add support for non-flushing OutputStream to StreamUtils #36382
- Make it easier to get InputStream from RestClient #36380
- RuntimeHintsWriter should comply with reachability-metadata-schema-v1.2.0.json #36379
- Make it easier to create custom HttpExchangeAdapter #36374
- Improve ResourceHttpMessageConverter target type support #36368
- org.springframework.test.web.servlet.assertj.AbstractHttpServletResponseAssert#headers case sensitivity #36349
- Allow registering serialized lambda metadata through RuntimeHints #36339
- Refactor calculateHashCode in RequestMappingInfo #36325
🐞 Bug Fixes
- MetadataReader misses enclosing class name for Kotlin nested classes with Java 24+ #36451
- Guard against invalid id/event values in Server Sent Events #36440
- Component scanning fails against non-loadable annotation type with enum array on Java 25 #36432
- Duplicate ServletServerHttpRequest headers #36418
- Incomplete debug message in ConfigurationClassBeanDefinitionReader #36410
- Inconsistent ApplicationEventMulticaster state after removing ApplicationListener implemented by FactoryBean #36404
- Propagate max frame length to WebSocket session #36370
- Graceful shutdown of SimpleAsyncTaskExecutor #36362
- Duplicate response headers with
ResponseEntity<Mono<T>>(or Kotlin suspend function) controller method #36357 - HttpServiceProxyFactory returns LinkedHashMap instead of target type for method with generic return type #36326
- HttpMediaTypeException thrown when calculating compatible media types #36300
📔 Documentation
- Document
FullyQualifiedConfigurationBeanNameGeneratorin Javadoc and reference docs #36455 - Document
@FallbackalongsidePrimaryin the reference manual and@BeanJavadoc #36439 - Fix links to
UriComponentsBuilderand polish examples #36403 - Emphasize
@Configurationclasses over XML and Groovy in testing chapter #36393 - Document tips to avoid issues with ignored default context configuration in tests #36392
- Polish SpEL operator examples in reference docs #36367
- Add programmatic configuration tabs in the transactional refdoc #36323
- Document registration recommendations for
BeanPostProcessorandBeanFactoryPostProcessor#34964
🔨 Dependency Upgrades
- Upgrade to JUnit 6.0.3 #36389
- Upgrade to Micrometer 1.16.4 #36444
- Upgrade to Reactor 2025.0.4 #36443
❤️ Contributors
Thank you to all the contributors who worked on this release:
@AgilAghamirzayev, @aavoronin93, @cetf9h, @froggy0m0, @gbouwen, @husseinvr97, @jisub-dev, @ngocnhan-tran1996, @siom79, and @xxxxxxjun