Releases: spring-projects/spring-framework
Release list
v7.1.0-M1
β οΈ Attention Required
- starting in Spring Framework 7.1,
ForwardedHeaderFilter(Spring MVC) andForwardedHeaderTransformer(WebFlux) each require a boolean argument whether to use the standard "Forwarded" header or the "X-Forwarded" alternative headers. A separate property enables use of "X-Forwarded-Prefix" if needed. The default constructor with the existing behaviour of checking both types of headers is still available but deprecated and marked for removal. The new constructor makes forwarded header processing more deterministic and aligned with what is expected from the proxy. Please, see the updated Security Considerations section, as well as related changes in Spring Boot spring-projects/spring-boot#51030. #37072 - Default context config is not detected when superclass or enclosing class is not annotated with
@ContextConfiguration#31456
β New Features
- Add logging operators in DefaultExchangeFunction only when debug is enabled #37095
- Consistently enforce non-null instance in
AbstractFactoryBean#37091 - Reinstate invalid resource location checks #37063
- Preserve original bean names as aliases with
FullyQualifiedConfigurationBeanNameGenerator#37038 - Improve forwarded header parsing #36964
- Avoid "NullAway.Init" suppression in favor of explicit field handling #36961
- Refine and better specify error handling in MultipartParser #36947
- Use double division to calculate applied jitter in
ExponentialBackOff#36943 - Throw
ClassNotFoundExceptionfor missing class resource inThrowawayClassLoader#36938 - Replace
isAssignableFrom()withisInstance()where feasible #36899 - Simplify BUFFER_COUNT in ConcurrentLruCache to a constant #36872
- Apply auto-grow collection limit to direct field binding #36862
- Reject duplicate MIME type parameters #36841
- Add
DataSizeconverters toDefaultConversionService#36830 - Only update
ObservationThreadLocalAccessorwhen a test has an activeApplicationContext#36817 - Deprecate setDisallowedFields in DataBinder for removal #36816
- Optimize ClassNameReader.getClassName via direct ASM API #36814
- AbortedException from client logged at ERROR level with WebFlux functional endpoint #36811
- Add dedicated exception for HttpStatus.PRECONDITION_FAILED #36807
- Reset mocks only when a test has an active
ApplicationContext#36782 - Improve MimeType parser for RFC compliance #36729
- Reject unsafe static resource locations in MVC and WebFlux #36695
- Use
String#replaceinstead ofString#replaceAllwhere appropriate #36678 - Beans created with BeanRegistrar on GenericApplicationContext do not honor allow-bean-definition-overriding setting #36648
- Use defensive
Datecopies forSimpleMailMessagesentDate#36626 - Align
StandardMethodMetadatawith ASM/ClassFile support forgetReturnTypeName()#36619 - Use canonical names in error messages in annotation processing #36607
- Provide bean conditional registration capabilities in
BeanRegistrarDsl#36601 - Align with JDK behavior by throwing
TypeNotPresentExceptionduring annotation processing #36593 - Deprecate RestTemplate and related types #36574
- Remove deprecated
methodIdentification()method inCacheAspectSupport#36560 - Reject unbalanced parentheses in profile expressions #36550
- Introduce
ResolvableType.forParameter()factory method #36545 - Remove redundant
Assert.notNull()checks inResolvableType#36544 - Introduce support for custom parameter names in
ParameterResolutionDelegate#36534 - Perform case-insensitive lookup in
HttpMethod.valueOf()#36518 - Add "application/jsonl" support alongside "application/x-ndjson" for streaming #36485
- Replace HandlerMappingIntrospector with PreFlightRequestHandler bean in MVC config #36481
- GenericTypeResolver.resolveType should resolve TypeVariable with nested ParameterizedType #36480
- Introduce
classpath*:support forResourceLoader#getResourcewith fully specified resource path #36415 - Support for Map body types in FormHttpMessageConverter #36408
- Support compilation of SpEL expressions that use
Optionalwith null-safe and Elvis operators #36330 - Skip Jaxb auto-detection in HttpMessageConverters for servers #36302
- Handle multi-JAR resources in ReloadableResourceBundleMessageSource #36292
- Support for JPA 4.0
@PersistenceAgentinjection #36264 - Move multipart support out of FormHttpMessageConverter #36256
- Introduce MultipartHttpMessageConverter #36255
- Introduce HttpMessageConverter#canWriteRepeatedly #36252
- Override Servlet 6.1's
doPatch()method inFrameworkServlet#36247 - Allow local
@BootstrapWithannotation to override a meta-annotation within the same composed annotation #35938 - Support for JTA 2.1 read-only transaction management #35915
- Add typesafe method to get generic bean by name with type reference #35808
- Support reading multipart requests from RestTestClient in MockMvc #35569
- Use 500 for default exception handling when DisconnectedClientHelper#clientDisconnectedException returns true #34481
- Support reading multipart HTTP messages with a converter #33263
- Provide bean conditional registration capabilities in
BeanRegistrar#21497 - Support
@MockitoBeanand@MockitoSpyBeanon test constructor parameters #36096
π Bug Fixes
v7.0.9
β οΈ Attention Required
- In Spring Framework 7.0.9,
ForwardedHeaderFilter(Spring MVC) andForwardedHeaderTransformer(WebFlux) each provide a boolean constructor argument whether to use the standard "Forwarded" header or the "X-Forwarded" alternative headers. A separate property turns on and off use of "X-Forwarded-Prefix". While the default constructor preserves the existing behavior, we recommend to use the new constructor to explicitly specify which forwarded headers to use to make the processing more deterministic and aligned with what is expected from the proxy. Please, see the updated Security Considerations section for details. In 7.1 with #37072 the default constructor is deprecated and marked for removal. #37090 - In Spring Framework 7.0.9,
SimpleEvaluationContextno longer supports expression compilation by default, regardless of the compiler mode configured viaSpelParserConfigurationor thespring.expression.compiler.modesystem property or Spring property. Applications that intentionally useSimpleEvaluationContextwith trusted expressions and require compilation for performance reasons can opt in by callingwithCompilationSupported()on theSimpleEvaluationContextbuilder. Care should be taken when opting in to compilation, as doing so removes the safety guards applied during interpreted evaluation. #37035
β New Features
- Ignore an empty port value in URI parsing #37117
- Avoid retaining class files in annotation metadata #37112
- Add
@Nullableannotations when treatingMap.remove()as returning@Nullable#37067 - Revisit SSE view fragments handling #37061
- Check list index after auto-grow in
AbstractNestablePropertyAccessor#37036 - Disable SpEL expression compilation by default in
SimpleEvaluationContext#37035 - Limit result size of
BigDecimal/BigIntegerpower operations in SpEL #37034 - Refactor redirect handling in UrlHandlerFilter #37030
- Revise stylesheet source handling in XsltView #37029
- Revise view name handling in UrlFilenameViewController #37027
- Handle pre-flight requests in functional endpoint setup without DispatcherHandler #37024
- Improve WebSocket handshake error logging #37023
- Fix missing nullability in JdbcTemplate.batchUpdate #37012
- Timeout property in RetryPolicy does not have a default constant #36983
- Write native configuration files as UTF-8 #36972
- DefaultServerRequest.ServletParametersMap.entrySet() does not retain HttpServletRequest.getParameterMap() order #36966
- Perform nextKey within synchronization for SQLite as well #36959
- Add support for custom ObjectInputFilter on DefaultDeserializer #36958
- Revise resource bundle caching for common locales #36957
- Improve nullability for
getSession(*)inMockHttpServletRequest#36926 - Improve fallback logic in ParameterContentNegotiationStrategy and ParameterContentTypeResolver #36925
- Improve ambiguous match check on preflight request #36903
- Improve Groovy markup template loading #36902
- Improve request path handling on a Reactor Netty server #36893
- Improve JettyWebSocketSession error handling #36891
π Bug Fixes
- EclipseLinkJpaDialect singleton lock in EclipseLinkConnectionHandle.getConnection() serializes all JDBC connection acquisitions under load #37085
- MetadataReader fails to read byte[] array from annotation #37083
- Ensure parsing/tostring symmetry in ContentDisposition #37064
- Character outside of permitted range in Content Disposition #37062
- Release Jackson BufferRecycler to its pool in encoders #37059
- Ensure consistent error escaping #37055
- Refine template name processing #37054
- Reset TwoByteMatcher partial match on mismatching byte #37053
- Refactor async XML parsing limit checks #37031
- Fix part constraint checks in PartEventHttpMessageReader #37028
- Fix buffer leak in RSocket SETUP frame handling #37026
- Ensure correct Jetty core response cookie handling #37025
- Align
domainToAsciiwith current WhatWG spec #37018 - Ensure consistent
ButtonTagvalue attribute processing #37017 - SpEL's
InlineListis cached as a mutable list in compiled mode #37001 - Write native configuration file when only lambda hints are present #36989
- SpEL
Indexerreuses invalid cachedPropertyAccessor#36986 - SpEL reuses invalid cached
ConstructorExecutor#36985 MimeTypeUtilsraisesStringIndexOutOfBoundsExceptionfor some invalid mime types #36971- Ignore DOCTYPE inside a multi-line comment body #36948
- Avoid divide-by-zero in
ExponentialBackOffjitter #36932 - Refactor use or close lock in ConcurrentWebSocketSessionDecorator #36909
- Host header initialization breaking change in StompRelayMessageBrokerHandler #36907
- Remote address checks for SockJS session #36681 breaks xhr-polling #36904
- LifeCyclePrintWriter does not delegate correctly #36885
- IllegalArgumentException when creating named native query via Shared EntityManager with Hibernate 8.0.0-SNAPSHOT / JPA 4.0.0-M4 #36878
π Documentation
- Document AOP proxy semantics for Bean Overrides in tests #37121
- Provide guidance for object model design in SpEL #37102
- Fix Javadoc error in ProtobufDecoder #37079
- Document security implications of evaluating untrusted SpEL expressions #36997
- Document relationships between expressions, evaluation contexts, and accessors in SpEL #36968
- Update Javadoc for
@ActiveProfilesordering #36950 - Document behavior for 0 delay combined with jitter in backoff policies #36946
- Clarify design goal of UrlFilenameViewController in Javadoc #36906
π¨ Dependency Upgrades
- Upgrade to Micrometer 1.16.7 and Tracing 1.6.7 [#3710...
v7.0.8
β οΈ Security Fixes
This maintenance release fixes a high number of CVEs. You can learn more about this in the "Spring and Security In The Times Of AI" blog post. Here is the full list of 16 CVEs:
- CVE-2026-41838 "Spring Framework Predictable Session ID in WebSocket Module"
- CVE-2026-41839 "Spring Framework Escalation via Session Fixation in WebFlux"
- CVE-2026-41840 "Spring Framework Denial of Service via Multipart Requests in WebFlux"
- CVE-2026-41841 "Spring Framework Information Disclosure via Static Resource Cache in Spring MVC and WebFlux"
- CVE-2026-41842 "Spring Framework Denial of Service via Versioned Resources in Spring MVC and WebFlux"
- CVE-2026-41843 "Spring Framework Path Traversal via Versioned Static Resources in Spring MVC and WebFlux"
- CVE-2026-41844 "Spring Framework Open Redirect in Spring MVC and WebFlux"
- CVE-2026-41845 "Spring Framework Cross-site Scripting via JavaScriptUtils"
- CVE-2026-41846 "Spring Framework Cross-site Scripting via JSP Form Tags"
- CVE-2026-41848 "Spring Framework Denial of Service via AntPathMatcher"
- CVE-2026-41850 "Spring Framework Algorithmic Denial of Service via SpEL Expressions"
- CVE-2026-41851 "Spring Framework Denial of Service via Unbounded Cache in SpEL"
- CVE-2026-41852 "Spring Framework Arbitrary Method Invocation in SpEL Expressions"
- CVE-2026-41853 "Spring Framework Multipart Request Smuggling in Spring MVC and WebFlux"
- CVE-2026-41854 "Spring Framework Server-Side Request Forgery via UriComponentsBuilder"
- CVE-2026-41855 "Spring Framework Unsafe Deserialization via Jackson JMS Converters"
β New Features
- Include zone ID in CronTrigger's equals/hashCode implementations #36871
- Expose
ClassLoaderfromDefaultDeserializer#36833 - Use immutable map for SEPARATORS static field in DefaultPathContainer #36821
- Track operations during SpEL expression evaluation #36801
- Ensure getters have non-void return types in SpEL #36800
- Avoid too many character access attempts in
AntPathMatcher#36799 - Refine default view name resolution #36793
- Refine Jackson JMS converters #36791
- Improve ABNF rule checks in RfcUriParser #36787
- Restrict
SpringVersion.getVersion()to "major.minor.patch" format #36785 - Runtime compatibility with JPA 4.0 M4 and corresponding Hibernate 8.0 snapshots #36784
- Allow specifying the charset to use in
ExchangeFilterFunctions#basicAuthentication#36777 - Use CollectionUtils to initialize HashMap in DefaultUriBuilderFactory #36763
- Improve error messages in SpEL #36756
- Improve pattern caching in SpEL #36755
- Avoid ResolvableType#forType contention for implicit cache cleanup #36745
- Switch to JdkIdGenerator for WebSocket Sessions #36740
- Detect custom deserialized
NullValueinstances inAbstractValueAdaptingCache#36727 - LiteWebJarsResourceResolver does not resolve directories #36726
- Warn against unsafe static resource locations in MVC and WebFlux #36692
- Consistent compatibility with Woodstox as an alternative to Xerces #36682
- Improve principal checks for SockJS session #36681
- Set host header consistently in STOMP relay CONNECT frames #36673
- Support Micrometer context propagation in Kotlin
Flow#36667 - Reliable detection of broadcast messages in UserDestinationMessageHandler #36662
π Bug Fixes
- Concurrency issue against shared cookie field in
CookieLocaleResolver#setLocaleContext#36869 - Server Sent Event does not support multi-line comments #36866
- CronExpression skips days on midnight DST gap #36865
- Regression in 6.2.0+:
ConfigurationClassParserincorrectly removes component-scanned bean when the same class is also registered under a different name via XML #36835 - Preserve generic type info in awaitEntity() #36834
- Bean Background Bootstrap and Lazy Init #36844
- Back-off for DefaultMessageListenerContainer with OracleAQ has changed and is very short in SpringBoot 4 #36809
- Character outside of permitted range in Content Disposition #36805
- Fix JSP tag processing #36797
- Fix script processing capabilities #36795
- Jaxb2XmlEncoder exclusivity prevents JacksonXmlEncoder usage and hinders POJO serialization #36776
- JacksonXmlEncoder.canEncode incorrectly returns true for String body with application/xml #36775
- Consistently expose map key quotes in
PropertyAccessorUtils#36765 - Fix fragment parsing for relative URI in RFC URI parser #36762
- Fix race condition in InMemoryWebSessionStore #36742
- Parsing failure for MIME type with quoted parameter values #36730
- Circular dependency between supplier-created beans is silently ignored on startup #36725
- Data is lost for joined DataBuffer in DataBufferUtils #36714
- Cache collisions in CachingResourceResolver #36713
- Unexpected path element removal when resolving versioned resources #36698
- Non-deterministic "Body token not expected" in org.springframework.http.codec.multipart.PartGenerator #36694
- Regression on value class parameter handling #36665
- Fix inverted logic for boolean last flag in JettyWebSocketSession when sending binary message #36650
- Parent traceId is not reused when calling WebClient.awaitExchange function #36182
π Documentation
- Fix broken links to Selenium documentation #36875
- Fix applicability note on setAutoGrowCollectionLimit #36863
- Document
@Conditionalgating of nested@Configurationclasses #36831 - Javadoc of nestingLevel parameter in MethodParameter constructor is inconsistent with actual implementation #36826
- Re-structuring of Data Binding C...
v6.2.19
β οΈ Security Fixes
This maintenance release fixes a high number of CVEs. You can learn more about this in the "Spring and Security In The Times Of AI" blog post. Here is the full list of 16 CVEs:
- CVE-2026-41838 "Spring Framework Predictable Session ID in WebSocket Module"
- CVE-2026-41839 "Spring Framework Escalation via Session Fixation in WebFlux"
- CVE-2026-41840 "Spring Framework Denial of Service via Multipart Requests in WebFlux"
- CVE-2026-41841 "Spring Framework Information Disclosure via Static Resource Cache in Spring MVC and WebFlux"
- CVE-2026-41842 "Spring Framework Denial of Service via Versioned Resources in Spring MVC and WebFlux"
- CVE-2026-41843 "Spring Framework Path Traversal via Versioned Static Resources in Spring MVC and WebFlux"
- CVE-2026-41844 "Spring Framework Open Redirect in Spring MVC and WebFlux"
- CVE-2026-41845 "Spring Framework Cross-site Scripting via JavaScriptUtils"
- CVE-2026-41846 "Spring Framework Cross-site Scripting via JSP Form Tags"
- CVE-2026-41848 "Spring Framework Denial of Service via AntPathMatcher"
- CVE-2026-41850 "Spring Framework Algorithmic Denial of Service via SpEL Expressions"
- CVE-2026-41851 "Spring Framework Denial of Service via Unbounded Cache in SpEL"
- CVE-2026-41852 "Spring Framework Arbitrary Method Invocation in SpEL Expressions"
- CVE-2026-41853 "Spring Framework Multipart Request Smuggling in Spring MVC and WebFlux"
- CVE-2026-41854 "Spring Framework Server-Side Request Forgery via UriComponentsBuilder"
- CVE-2026-41855 "Spring Framework Unsafe Deserialization via Jackson JMS Converters"
β New Features
- Avoid too many character access attempts in
AntPathMatcher#36886 - Track operations during SpEL expression evaluation #36887
- Ensure getters have non-void return types in SpEL #36888
- Expose
ClassLoaderfromDefaultDeserializer#36839 - Refine default view name resolution #36794
- Refine Jackson JMS converters #36792
- Improve ABNF rule checks in RfcUriParser #36788
- Detect custom deserialized
NullValueinstances inAbstractValueAdaptingCache#36728 - Warn against unsafe static resource locations in MVC and WebFlux #36693
- Consistent compatibility with Woodstox as an alternative to Xerces #36683
π Bug Fixes
- Data is lost for joined DataBuffer in DataBufferUtils #36874
- CronExpression skips days on midnight DST gap #36873
- Concurrency issue against shared cookie field in
CookieLocaleResolver#setLocaleContext#36870 - Server Sent Event does not support multi-line comments #36867
- Regression in 6.2.0+:
ConfigurationClassParserincorrectly removes component-scanned bean when the same class is also registered under a different name via XML #36849 - Bean Background Bootstrap and Lazy Init #36847
- Fix JSP tag processing #36798
- Fix script processing capabilities #36796
- Parsing failure for MIME type with quoted parameter values #36734
- Circular dependency between supplier-created beans is silently ignored on startup #36732
- Non-deterministic "Body token not expected" in org.springframework.http.codec.multipart.PartGenerator #36722
- Regression on value class parameter handling #36720
- Cache collisions in CachingResourceResolver #36718
- Unexpected path element removal when resolving versioned resources #36699
π Documentation
- Fix broken links to Selenium documentation #36877
- Fix applicability note on setAutoGrowCollectionLimit #36864
- Javadoc of nestingLevel parameter in MethodParameter constructor is inconsistent with actual implementation #36848
π¨ Dependency Upgrades
v7.0.7
β New Features
- Improve
SpringValidatorAdapterandMethodValidationAdapterperformance #36621 - Support JSON array decoding to
FluxinKotlinSerializationJsonDecoder#36597 - Deprecate
methodIdentification()inCacheAspectSupportfor removal #36575 - Add MockRestServiceServer#createServer variant for RestClient #36572
- Create RestClientXhrTransport variant replacing RestTemplateXhrTransport #36566
- Improve error handling in multipart codecs #36563
- Make
ApplicationListenerMethodAdapter#getTargetMethod()public #36558 - ApiVersionConfigurer.setSupportedVersionPredicate() returns void instead of ApiVersionConfigurer #36551
- LazyConnectionDataSourceProxy does not work well with Hibernate's multi-tenancy by schema strategy #36527
- Add registerManagedResource variant with bean key argument to MBeanExporter #36520
- Handle blank Accept-Language header in AcceptHeaderLocaleResolver #36513
- Make AbstractStreamingClientHttpRequest and AbstractBufferingClientHttpRequest public #36501
- MySQL Error 149 (Galera/WSREP conflict) not translated to ConcurrencyFailureException in Spring JDBC/ORM #36499
- Add PreFlightRequestFilter #36482
- Support configuration of extension context scope for
SpringExtensionvia Spring or JUnit properties #36460 - Lower log level of "Cache miss for REQUEST dispatch" in HandlerMappingIntrospector #36309
π Bug Fixes
- WebDataBinder unnecessarily instantiates collections when using the "!" and "_" prefixes #36625
- Cache pollution from high-cardinality FieldError default messages in MessageSourceSupport #36609
MergedAnnotationdoes not useClassLoaderfor method or field #36606@Sqlfails ifDataSourceis wrapped in aTransactionAwareDataSourceProxy#36611AnnotatedTypeMetadatano longer retains source declaration order on Java 24+ #36598MergedAnnotation.asMap()fails when an attribute references a non-existent class #36586FileSystemResourcedoes not strictly follow theResource#isReadable()contract #36584- Converter overrides in HttpMessageConverters only apply when defaults are registered #36579
- Invalid method return type metadata for ClassFile variant on JDK 24+ #36577
- Fix Writer lifecycle for
AbstractJsonHttpMessageConverter.writeInternal(Object, Type, Writer)#36565 - Flushing-related regression in
SseServerResponse#36537 - LazyConnectionDataSourceProxy does not pass on holdability to target Connection #36528
AnnotationBeanNameGeneratorfails when an annotation references a non-existent class #36524- Perserve default API version in RestClientAdapter #36514
- Inconsistent codings resolution in resource resolvers #36507
DefaultJmsListenerContainermay hang in an endless loop indoShutdown#36506- Query not hidden in DefaultClientResponse checkpoint #36502
- RestClient closes stream for ResponseEntity responses #36492
- IllegalStateException when using websocket handshake headers with Tomcat #36486
- Invalid nullness information for ParameterizedTypeReference #36477
- WebTestClient cannot assert null list elements #36476
- Handle Kotlin nullable value class param correctly in
CoroutineUtils#36449 - Remove RFC 2047 encoding from Content-Disposition filename #36328
π Documentation
- Clarify semantics of HttpMethod.valueOf() #36652
- Document whitespace semantics in SpEL expressions #36628
- Document that
spring.profiles.activeis ignored by@ActiveProfiles#36600 MergedAnnotation.asAnnotationAttributes()Javadoc incorrectly states that it creates an immutable map #36567- Fix incorrect Javadoc in HandlerMethodReturnValueHandlerComposite regarding caching #36555
- Fix incorrect method name in
TypeDescriptor.array()Javadoc #36549 - Introduce Kotlin examples for Bean Overrides (
@MockitoBean, etc.) #36541 - Fix incorrect cross-reference links in AbstractEnvironment Javadoc #36516
- Document RetryTemplate#invoke variants in reference manual #36452
- Link observability section to Micrometer Observation Handler docs #34994
π¨ Dependency Upgrades
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@Mohak-Nagaraju, @Sineaggi, @T45K, @angry-2k, @bebeis, @cookie-meringue, @dmitrysulman, @elgunshukurov, @itsmevichu, @junhyung8795, @msridhar, @nameearly, @tobifasc, and @xxxxxxjun
v6.2.18
β New Features
- Improve
SpringValidatorAdapterandMethodValidationAdapterperformance #36624 - Add missing
@Deprecated(forRemoval = true) for deleted in 7.0 #36591 - Deprecate
methodIdentification()inCacheAspectSupportfor removal #36576 - Improve error handling in multipart codecs #36564
- LazyConnectionDataSourceProxy does not work well with Hibernate's multi-tenancy by schema strategy #36529
- MySQL Error 149 (Galera/WSREP conflict) not translated to ConcurrencyFailureException in Spring JDBC/ORM #36510
π Bug Fixes
- Handle Kotlin nullable value class param correctly in
CoroutineUtils#36643 - NullPointerException in ServerSentEvent when trying to set id or event properties #36634
@Sqlfails ifDataSourceis wrapped in aTransactionAwareDataSourceProxy#36630- WebDataBinder unnecessarily instantiates collections when using the "!" and "_" prefixes #36627
- Cache pollution from high-cardinality FieldError default messages in MessageSourceSupport #36623
- ContentCachingRequestWrapper does not allow unlimited content caching #36620
MergedAnnotationdoes not useClassLoaderfor method or field #36614AnnotationBeanNameGeneratorfails when an annotation references a non-existent class #36588FileSystemResourcedoes not strictly follow theResource#isReadable()contract #36585- Query not hidden in DefaultClientResponse checkpoint #36571
- LazyConnectionDataSourceProxy does not pass on holdability to target Connection #36530
DefaultJmsListenerContainermay hang in an endless loop indoShutdown#36511- Inconsistent codings resolution in resource resolvers #36508
π Documentation
- Clarify semantics of HttpMethod.valueOf() #36653
- Document that
spring.profiles.activeis ignored by@ActiveProfiles#36636 - Document whitespace semantics in SpEL expressions #36629
MergedAnnotation.asAnnotationAttributes()Javadoc incorrectly states that it creates an immutable map #36568- Introduce Kotlin examples for Bean Overrides (
@MockitoBean, etc.) #36542 - Fix incorrect cross-reference links in AbstractEnvironment Javadoc #36517
π¨ Dependency Upgrades
v7.0.6
β οΈ 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
v6.2.17
β New Features
- Leverage
ResourceHandlerUtilsinScriptTemplateView#36459 - Restore
ScriptTemplateViewTests#36457 - Fix log message in
ConfigurationClassBeanDefinitionReader#36454 - Resolve context initializers only once in
AbstractTestContextBootstrapper#36431 - Exclude legacy
@javax.validation.Constraintfrom convention-based annotation attribute override check #36412 - Optimize
MediaType(MediaType, Charset)constructor #36351 - Optimize the addition of a charset to the MediaType in AbstractHttpMessageConverter #36350
- Consistent adaptation of HTTP headers on Servlet responses #36345
- Improve performance of validation groups determination in WebFlux #36337
- Detect all common size exceptions from Tomcat and Commons FileUpload 2.x #36324
π Bug Fixes
- Guard against invalid id/event values in Server Sent Events #36442
- Incomplete debug message in ConfigurationClassBeanDefinitionReader #36411
- Inconsistent ApplicationEventMulticaster state after removing ApplicationListener implemented by FactoryBean #36405
- Graceful shutdown of SimpleAsyncTaskExecutor #36384
- HttpMediaTypeException thrown when calculating compatible media types #36363
- ResolvableType#getGenerics() breaks serialization #36347
- Multipart upload leak on client abort (ByteBuf.release() not called) #36327
π Documentation
- Document
@FallbackalongsidePrimaryin the reference manual and@BeanJavadoc #36441 - Document registration recommendations for
BeanPostProcessorandBeanFactoryPostProcessor#36436 - Fix links to
UriComponentsBuilderand polish examples #36406 - Emphasize
@Configurationclasses over XML and Groovy in testing chapter #36394 - Polish SpEL operator examples in reference docs #36375
π¨ Dependency Upgrades
v7.0.5
β οΈ Attention Required
- Optimize request and response header handling in Spring MVC #36334
β New Features
- Consistent adaptation of HTTP headers on Servlet responses #36343
- Copy methodAnnotations in MethodParameter copy constructor #36342
- Improve performance of validation groups determination in WebFlux #36336
- Reuse
AnnotatedMethodannotation cache in derived instances #36322 - Optimize the addition of a charset to the MediaType in AbstractHttpMessageConverter #36320
- Optimize
MediaType(MediaType, Charset)constructor #36318 - Detect all common size exceptions from Tomcat and Commons FileUpload 2.x #36317
- Consistently support
@Autowiredas a meta-annotation #36315 - Avoid duplicate
requiredattribute lookup for@Autowiredannotations #36314 - Cache
@ResponseBodypresence per controller class inRequestResponseBodyMethodProcessor#36311
π Bug Fixes
- ResolvableType#getGenerics() breaks serialization #36346
- DefaultHttpMessageConverters not adding provided configurer #36332
- Restore early MessageConsumer creation for temporary queue #36321
- Multipart upload leak on client abort (ByteBuf.release() not called) #36262
π Documentation
- Document that SpEL expressions using
Optionalwith null-safe and Elvis operators are not compilable #36331 - Improve documentation of baseline API version to emphasize version must be supported #36316
- Stop referring to obsolete
ListenableFuturein documentation #36313 - Stop referring to standard Java features as "Java 8" features in documentation #36310
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@Niravil and @TAKETODAY
v7.0.4
β New Features
- Cache method annotations in
MethodParameterandAnnotatedMethod#36307 - Consistently support
@Lazyas a meta-annotation at arbitrary depths #36306 - Consistently support
@Validatedas a meta-annotation at arbitrary depths #36305 - Let developers disable default registrations in HttpMessageConverters #36303
- Log which HandlerInterceptor threw the exception #36281
- Improve performance of hashcode calculations for request mappings #36279
- Improve performance of HandlerMethod bean lookup #36278
- Improve performance of version mapping #36276
- Improve performance of single pattern request mappings #36275
- Improve performance of validation groups determination #36274
- Add
setPackagesToScanconfiguration method toLocalEntityManagerFactoryBean#36270 - Remove outdated GraalVM substitution #36257
- Introduce
beforeRetrycallback withRetryStateargument #36245 - Optimize NamedParameterUtils#buildValueArray by lazily fetching SqlParameter #36230
- Allow customization of the
ProxyFactoryinHttpServiceProxyFactoryused to create HTTP service proxies #36225 - Consistently close streams through try-with-resources in FileCopyUtils #36223
- Use Java Files utilities in FileCopyUtils #36221
- SqlBinaryValue and SqlCharacterValue should support InputStream content with undetermined length #36219
- Support JtaTransactionManager and SpringBeanContainer configuration on HibernateJpaVendorAdapter #36216
- Add TaskCallback/Callable/Runnable wrapper for retryable tasks #36208
- Refine YamlProcessor to allow different empty values #36207
- Anticipate fixing Kotlin 2.3 compilation warning #36203
- Allow YAML processors to create a flattened map with nulls included #36197
- Use Reader.transferTo in FileCopyUtils #36196
DataBufferUtils.write()with NettyDataBuffer on JDK 25 hangs indefinitely #36184- Make SendToMethodReturnValueHandler and SubscriptionMethodReturnValueHandler customizable, to allow for pass-through of message headers #36179
- Introduce
RestClient.ResponseSpec#requiredBody#36173 - Make scope fully configurable in BeanRegistry/BeanRegistrar #36171
- ConcurrencyThrottleSupport and thread interruption #36167
- Add overloaded sendAndReceive methods to JmsTemplate to use explicit response queue #36162
- WebClient (Reactor) attributes on Netty channel do not clear after connection release #36158
- Support HttpEntity on ContentRequestMatchers.multipartData #36154
- Reintroduce WebLogicJtaTransactionManager in Spring Framework 6.2.x #36151
- Back-off for
DefaultMessageListenerContaineris not applied consistently in case of listener setup failure #36143 - Early support for JPA 4.0 EntityAgent (autowiring a shared proxy) #36025
- Early compatibility with JPA 4.0 and Hibernate ORM 8.0 #35705
π Bug Fixes
- Resolved HttpEntity Controller argument does not reflect mutated HTTP headers #36298
- Avoid lock congestion in ConcurrentReferenceHashMap #36293
- AbstractMessageConverter does not support wildcards in supported MIME types #36285
- Make
LocalEntityManagerFactoryBean#setDataSourcework on Hibernate as well as EclipseLink #36271 StompBrokerRelayMessageHandlerfails to restart due to test context pausing #36266- Deadlock might occur when calling
System.exiton startup (against multiple shutdown hooks) #36260 - Missing resource hint for
BeanRegistrarimplementingImportAware#36242 - Inconsistent behavior with
@Retryableon annotated interfaces #36233 Netty4HeadersAdapter.removereturns empty list instead ofnullfor non-existing key #36226- Generic type in AsyncTaskExecutor.submit(Callable) should be
@Nullable#36191 EclipseLinkConnectionHandlecan fail against transaction isolation race condition #36165
π Documentation
- Remove obsolete code in
Redirecting to a resourcesection #36284 - Fix formatting in Web MVC HTTP Message Conversion documentation #36250
- Remove obsolete doc for spring.context.annotated-bean-reader.create #36241
- Document
@SpringExtensionConfigin the reference manual #36240 - Fix JSON syntax in STOMP overview documentation #36229
- Revise documentation on JSR-330 support in the reference manual #36222
- Fix links to JUnit User Guide #36217
- Corrected the definition of coroutines #36209
- Fix
LocalContainerEntityManagerFactoryBean#setPersistenceUnitNamejavadoc #36205 - Update documentation on trailing slash handling where type-level
@GetMapping("/base") is combined with method level@GetMapping("/") #36198 - Update documentation on the MediaType used for ProblemDetail #36192
- Extract
DispatcherServletsnippets #36175 - Replace
getErrors()withgetBindingResult()in examples #36170 - Refine CORS documentation to match latest changes #36156
π¨ Dependency Upgrades
- Upgrade to Apache POI 5.5 #36174
- Upgrade to ASM 9.9.1 and Objenesis 3.5 #36243
- Upgrade to Micrometer 1.6.3 #36287
- Upgrade to Reactor 2025.0.3 #36288
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@Ivarz, @catturtle123, @chschu, @deejay1, @dingqianwen, @dungdm93, @furaizi, @izeye, @kchung1995, @kilink, @msridhar, @ngocnhan-tran1996, @pgoslatara, @philwebb, @pisek, and @shub-est