⭐ New Features
- Align
JpaTransactionManager
default fornestedTransactionAllowed
flag #35457 - Introduce
onRetryPolicyInterruption()
callback inRetryListener
#35442 - Add DataFieldMaxValueIncrementer for SQLite #35440
- Consistent support for non-default NIO.2 FileSystems #35435
- Include exceptions for previous attempts in
RetryException
thrown for anInterruptedException
#35434 - Include current exception in log message for failed retry attempt #35433
- Remove HttpServiceClient Annotation Support #35431
- Deprecate
put(MergedContextConfiguration, ApplicationContext)
inContextCache
#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
andsetDefaultVersion
are called onApiVersionConfigurer
#35387 - Accept
maxAttempts(0)
inRetryPolicy
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 implementAutoCloseable
#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 returningUnit
#35420 - Invalid Nullness information for Kotlin properties #35419
ApiVersionConfigurer.setVersionRequired(...)
does not result inMissingApiVersionException
#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 toNullPointerException
#35353- Wrong PathPattern parsing for segments ending in '**' #35339
RetryTemplate
should officially exposeRetryException
toRetryListener.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