github spring-projects/spring-framework v7.0.0-M9

pre-release7 hours ago

⭐ New Features

  • Align JpaTransactionManager default for nestedTransactionAllowed flag #35457
  • Introduce onRetryPolicyInterruption() callback in RetryListener #35442
  • Add DataFieldMaxValueIncrementer for SQLite #35440
  • Consistent support for non-default NIO.2 FileSystems #35435
  • Include exceptions for previous attempts in RetryException thrown for an InterruptedException #35434
  • Include current exception in log message for failed retry attempt #35433
  • Remove HttpServiceClient Annotation Support #35431
  • Deprecate put(MergedContextConfiguration, ApplicationContext) in ContextCache #35415
  • ServerSentEventHttpMessageReader should process empty data lines #35412
  • Make it possible to stream "application/grpc" in Spring MVC via Flux #35401
  • Add createException method to ConvertibleClientHttpResponse in RestClient #35391
  • Consider throwing an error if setVersionRequired and setDefaultVersion are called on ApiVersionConfigurer #35387
  • Accept maxAttempts(0) in RetryPolicy builder #35362
  • Generate consistent validation error messages in RetryPolicy #35355
  • Drop support for Undertow as it is not Servlet 6.1 compatible #35354
  • Expose retry attempts in RetryException #35351
  • RetryException#getCause should not be nullable #35332
  • Refine CORS logging for non-processed requests due to no CORS configuration #35314
  • Refine Jackson 3 constructors to accept only JsonMapper instances for JSON #35282
  • Revise StartupStep to implement AutoCloseable #35277
  • Add compression support in JdkClientHttpRequestFactory #35225
  • Add support for Micrometer context propagation in Kotlin coroutines #35185
  • Add support for Forwarded By HTTP header #34683
  • Update HttpStatus to align with RFC9110 where relevant #32870
  • ContextCache should close evicted context before loading new context #21007

🐞 Bug Fixes

  • Refine Nullness for Kotlin functions returning Unit #35420
  • Invalid Nullness information for Kotlin properties #35419
  • ApiVersionConfigurer.setVersionRequired(...) does not result in MissingApiVersionException #35386
  • RestTestClient returns null response body #35385
  • Interface client methods that return InputStreams do not throw exceptions on bad HTTP status codes #35375
  • @Retryable cannot be used with with @HttpServiceClient due to NullPointerException #35353
  • Wrong PathPattern parsing for segments ending in '**' #35339
  • RetryTemplate should officially expose RetryException to RetryListener.onRetryPolicyExhaustion() #35334
  • Restore mixed usage support with uri() and queryParam() for query parameters in AbstractMockHttpServletRequestBuilder.buildRequest() #35329
  • Kotlinx Serialization doesn't work when using ResponseEntity #35281
  • "Failed to read candidate component class" with classfile metadata reading #35252

📔 Documentation

  • Docs: Rework mvc-jsp section with JavaConfig example (per review feedback) #35444
  • Document programmatic retry support in the reference manual #35436
  • Improve reference docs on API versioning by path #35421
  • Fix typo in websocket doc #35393
  • Refine null-safety tooling introduction #35383
  • Fix @HttpServiceClient example in reference manual #35363
  • Improve wording for transactional rollback rule semantics #35346
  • Document semantics of RetryException regarding cause and suppressed exceptions #35337
  • Formatting issue in RestTestClient documentation #35328

🔨 Dependency Upgrades

  • Upgrade to Jackson 3.0.0-rc9 and 2.20.0 #35439
  • Upgrade to Jetty 12.1.0 #35345
  • Upgrade to Kotlin 2.2.20 #35414
  • Upgrade to Micrometer 1.16.0-M3 #35453
  • Upgrade to Reactor 2025.0.0-M7 #35452

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Dongnyoung, @J-unStiN, @NeatGuyCoding, @gustaavv, @izeye, @remeio, @shakuzen, and @spicydev

Don't miss a new spring-framework release

NewReleases is sending notifications on new releases.