⭐ New Features
- Align
DelegatingMessageSourcefallback implementation withAbstractMessageSource#37383 HttpEntity(T, MultiValueMap)stores anHttpHeadersunchecked, causingIncompatibleClassChangeErrorinsideRestTemplate#37358- Recognize relocated Mockito
MockAccessinterface inProxyProcessorSupport#37342 - Runtime compatibility with JPA 4.0 M7 and corresponding Hibernate 8.0 snapshots #37315
- Avoid Kotlin reflection in MethodParameter for non-suspending functions #37300
- Revise underscore naming fallback in SimplePropertyRowMapper #37297
- Avoid useless queue ops in
ConcurrentLruCache.clear()#37292 PathMatchingResourcePatternResolvermisses jars onjava.class.pathwhose path contains%#37280- Remove redundant whitespace in exception messages #37277
- OpenInView does no longer work with HibernateTransactionManager #37273
- Lazily handle setClientInfo/setNetworkTimeout in LazyConnectionDataSourceProxy #37261
- Avoid redundant filtering in FilteredMap.size() #37256
- Support NaN and inifinite float values in
toString()for synthesized annotations #37244 - Use
ArrayListinstead ofLinkedListinCompositeRetryListener#37231 redirectedUrl()argument inMockMvcResultMatchersshould be@Nullable#37230- Published Gradle module file is missing
javadocElementsandsourcesElements#37209 - Introduce a builder for
SpelParserConfiguration#37187 - Protobuf support classes all implement getMessageBuilder() #37147
- Allow null contextPath in ServerHttpRequest.Builder #37099
- Log broker availability events as String messages #36856
🐞 Bug Fixes
- Avoid unnecessary dependent-bean registration for autowire-by-type #37424
- Handle zero readTimeout in JdkClientHttpConnector #37412
- Race condition in PartGenerator.CreateFileState can lose the completion signal #37409
- Paused executor with late shutdown leaks its worker thread (and the closed context) after close #37406
- Fix hanging retries for Flux-returning methods with caching #37403
- Avoid serving stale values after failed refill in
AbstractIdentityColumnMaxValueIncrementer#37402 - Copy cookies in
RenderingResponse.from()#37378 - Avoid phantom keys in
LinkedCaseInsensitiveMap.computeIfAbsent#37351 - Fix single-value adaptation for primitive array types in
TypeMappedAnnotation#37349 - CssLinkResourceTransformer fails for invalid CSS links #37336
- Fix cached ID reuse after commit failure in MySQLMaxValueIncrementer #37322
- Fix connection leak in MySQLMaxValueIncrementer #37321
@CacheEvicttruncatesFluxresults to the first element #37309ConcurrentLruCache.clear()can miss entries added while it's running #37287- Enforce disk usage limit when spilling part to disk #37285
- Prevent double size decrement in
ConcurrentLruCache#37268 - LogAccessor.debug(CharSequence) eagerly renders LogMessage since spring-core 7 switched from spring-jcl to commons-logging #37266
- WebFlux loses empty multipart file when the file part is not last. #37264
- Complete empty Uni instances from the Mutiny reactive adapter #37259
- DefaultAsyncServerResponse.writeAsync() discards previously configured AsyncWebRequest timeout #37257
- Provide missing native image hints for proxied hibernate 8 query types #37251
- Provide missing native image hint for StatelessSession proxy created by SharedEntityManagerCreator. #37249
- Provide missing native image reflection hint for hibernate PersistenceUnitInfoDescriptor. #37247
- Sort duplicate key codes in
SQLErrorCodes#37235 - Handle zero readTimeout in JdkClientHttpRequestFactory #37234
- Wrong reconnection attempt count in ReactorNettyTcpClient #37223
- Stored procedure OUT parameter values are lost outside a transaction as of 7.0.9 #37221
- Avoid int overflow in expiration time calculations in MockMvc and FlashMap #37208
- ScheduledAnnotationBeanPostProcessor doesn't correctly support bean destruction #37207
- Normalize function return parameter lookup in
CallMetaDataContext#37206 - Fix out-of-bounds read for truncated percent-escape in opaque host #37203
- ClassFileTransformerAdapter deadlocks between two persistence units under load-time weaving #37199
- Fix Kotlin value class handling for suspending AOP methods #37191
- Update to NullAway 0.14.0 and fix new warnings #37188
- ProtobufJsonEncoder emits JSON array when media type is ndjson #37158
- streamingMediaTypes in ProtobufJsonEncoder not a subset of encodableMimeTypes #37154
- Align
DataBufferUtils$WriteCompletionHandlerexception handling with theread()side #37145 DataBufferUtils.read()with NettyDataBuffer on JDK 25 hangs indefinitely #37143- Release queued body token buffers on multipart cancel #37115
- Preserve async API version resolver order #37096
- ClientResponse.mutate() builder can modify originalResponse headers. #37086
- Custom reason is overwritten by i18n message in ResponseStatusException.updateAndGetBody() #36984
- Generate compilable code for non-finite floating-point values #36965
- Render parameter type names in ClassFileMethodMetadata #36919
- Honor
sourceStartoffset inAbstractXMLStreamReader#getTextCharacters#36914 - Fix reserveMethodNames to reserve each supplied name #36912
- Replace thread-unsafe SimpleDateFormat with DateTimeFormatter in AbstractMockHttpServletRequestBuilder #36772
MockHttpServletRequest.isRequestedSessionIdValid()does not follow Servlet 6.1 Javadoc #36631- Map version from
@HttpExchangeto RequestMappingInfo #36602 - Ensure that ConversionService.canConvert(Enum) no longer throws an exception #34532
📔 Documentation
- Fix incorrect class names in WebFlux and MVC docs #37467
- Document the XXE threat model of SourceHttpMessageConverter #37407
- Update instructions for importing projects into Eclipse IDE #37397
- Fix syntax errors in the reference manual #37392
- Fix Kotlin example in Spring MVC test docs #37388
- Document usage of
typeattribute in JSP<form:input>tag #37376 - Make
CONTRIBUTING.mdself-contained and addAGENTS.md#37372 - Clarify ConcurrentReferenceHashMap reference semantics #37357
- Add missing enclosing single quotes in Javadoc #37338
- Fix MockMvc async requests example in documentation #37318
- Add closing braces to examples #37305
- Fix typos in Javadoc #37229
- Further updates to Data Binding Content in Web Sections of Documentation #37228
- Add missing closing parenthesis in WebFlux config reference example #37163
- Use
<<id,text>>instead ofxref:for local links in reference docs #37161 - Fix broken internal xref links in reference docs #37152
- Fix Kotlin examples in the reference manual #37101
- Document combining
@Retryablewith proxy-based features #37005 - Update recommendations for web data binding #36789
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Gabriel-Gerhardt, @Gimini-3, @SebTardif, @a-kogun, @cj848, @cookie-meringue, @dmitrysulman, @garvit-joshi, @geonheeryu, @guanchengang, @hunseonglee, @jhan0121, @junhyeong9812, @kodacme, @lejuho, @moonfruit, @msridhar, @ngocnhan-tran1996, @noojung, @renatomameli, @rene-schakmann, @shaggyinsomniac, @timtebeek, and @xoruddl