Skip to content

Releases: spring-projects/spring-framework

v7.1.0-M1

v7.1.0-M1 Pre-release
Pre-release

Choose a tag to compare

@spring-builds spring-builds released this 20 Aug 15:41

⚠️ Attention Required

  • starting in Spring Framework 7.1, ForwardedHeaderFilter (Spring MVC) and ForwardedHeaderTransformer (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 ClassNotFoundException for missing class resource in ThrowawayClassLoader #36938
  • Replace isAssignableFrom() with isInstance() 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 DataSize converters to DefaultConversionService #36830
  • Only update ObservationThreadLocalAccessor when a test has an active ApplicationContext #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#replace instead of String#replaceAll where appropriate #36678
  • Beans created with BeanRegistrar on GenericApplicationContext do not honor allow-bean-definition-overriding setting #36648
  • Use defensive Date copies for SimpleMailMessage sentDate #36626
  • Align StandardMethodMetadata with ASM/ClassFile support for getReturnTypeName() #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 TypeNotPresentException during annotation processing #36593
  • Deprecate RestTemplate and related types #36574
  • Remove deprecated methodIdentification() method in CacheAspectSupport #36560
  • Reject unbalanced parentheses in profile expressions #36550
  • Introduce ResolvableType.forParameter() factory method #36545
  • Remove redundant Assert.notNull() checks in ResolvableType #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 for ResourceLoader#getResource with fully specified resource path #36415
  • Support for Map body types in FormHttpMessageConverter #36408
  • Support compilation of SpEL expressions that use Optional with 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 @PersistenceAgent injection #36264
  • Move multipart support out of FormHttpMessageConverter #36256
  • Introduce MultipartHttpMessageConverter #36255
  • Introduce HttpMessageConverter#canWriteRepeatedly #36252
  • Override Servlet 6.1's doPatch() method in FrameworkServlet #36247
  • Allow local @BootstrapWith annotation 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 @MockitoBean and @MockitoSpyBean on test constructor parameters #36096

🐞 Bug Fixes

  • Ignore static get/is accessor methods in PropertyDescriptorUtils #37081
  • AnnotationDescriptor.findAllLocalMergedAnnotations fails to find interface annotations #36975
  • PartGenerator should close the OutputStream when it's done reading the part #36945
  • PartGenerator should also cle...
Read more

v7.0.9

Choose a tag to compare

@spring-builds spring-builds released this 20 Aug 15:41

⚠️ Attention Required

  • In Spring Framework 7.0.9, ForwardedHeaderFilter (Spring MVC) and ForwardedHeaderTransformer (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, SimpleEvaluationContext no longer supports expression compilation by default, regardless of the compiler mode configured via SpelParserConfiguration or the spring.expression.compiler.mode system property or Spring property. Applications that intentionally use SimpleEvaluationContext with trusted expressions and require compilation for performance reasons can opt in by calling withCompilationSupported() on the SimpleEvaluationContext builder. 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 @Nullable annotations when treating Map.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/BigInteger power 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(*) in MockHttpServletRequest #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 domainToAscii with current WhatWG spec #37018
  • Ensure consistent ButtonTag value attribute processing #37017
  • SpEL's InlineList is cached as a mutable list in compiled mode #37001
  • Write native configuration file when only lambda hints are present #36989
  • SpEL Indexer reuses invalid cached PropertyAccessor #36986
  • SpEL reuses invalid cached ConstructorExecutor #36985
  • MimeTypeUtils raises StringIndexOutOfBoundsException for some invalid mime types #36971
  • Ignore DOCTYPE inside a multi-line comment body #36948
  • Avoid divide-by-zero in ExponentialBackOff jitter #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 @ActiveProfiles ordering #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...
Read more

v7.0.8

Choose a tag to compare

@spring-builds spring-builds released this 08 Jun 17:49

⚠️ 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 ClassLoader from DefaultDeserializer #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 NullValue instances in AbstractValueAdaptingCache #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+: ConfigurationClassParser incorrectly 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 @Conditional gating of nested @Configuration classes #36831
  • Javadoc of nestingLevel parameter in MethodParameter constructor is inconsistent with actual implementation #36826
  • Re-structuring of Data Binding C...
Read more

v6.2.19

Choose a tag to compare

@spring-builds spring-builds released this 08 Jun 17:21

⚠️ 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 ClassLoader from DefaultDeserializer #36839
  • Refine default view name resolution #36794
  • Refine Jackson JMS converters #36792
  • Improve ABNF rule checks in RfcUriParser #36788
  • Detect custom deserialized NullValue instances in AbstractValueAdaptingCache #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+: ConfigurationClassParser incorrectly 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

  • Upgrade to JUnit 5.14.4 #36707
  • Upgrade to Micrometer 1.15.12 #36881
  • Upgrade to Reactor 2024.0.18 #36882

v7.0.7

Choose a tag to compare

@spring-builds spring-builds released this 17 Apr 07:06

⭐ New Features

  • Improve SpringValidatorAdapter and MethodValidationAdapter performance #36621
  • Support JSON array decoding to Flux in KotlinSerializationJsonDecoder #36597
  • Deprecate methodIdentification() in CacheAspectSupport for 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 SpringExtension via 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
  • MergedAnnotation does not use ClassLoader for method or field #36606
  • @Sql fails if DataSource is wrapped in a TransactionAwareDataSourceProxy #36611
  • AnnotatedTypeMetadata no longer retains source declaration order on Java 24+ #36598
  • MergedAnnotation.asMap() fails when an attribute references a non-existent class #36586
  • FileSystemResource does not strictly follow the Resource#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
  • AnnotationBeanNameGenerator fails when an annotation references a non-existent class #36524
  • Perserve default API version in RestClientAdapter #36514
  • Inconsistent codings resolution in resource resolvers #36507
  • DefaultJmsListenerContainer may hang in an endless loop in doShutdown #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.active is 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

  • Upgrade to Micrometer 1.16.5 #36659
  • Upgrade to Reactor 2025.0.5 #36658

❀️ 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

Choose a tag to compare

@spring-builds spring-builds released this 17 Apr 07:06

⭐ New Features

  • Improve SpringValidatorAdapter and MethodValidationAdapter performance #36624
  • Add missing @Deprecated(forRemoval = true) for deleted in 7.0 #36591
  • Deprecate methodIdentification() in CacheAspectSupport for 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
  • @Sql fails if DataSource is wrapped in a TransactionAwareDataSourceProxy #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
  • MergedAnnotation does not use ClassLoader for method or field #36614
  • AnnotationBeanNameGenerator fails when an annotation references a non-existent class #36588
  • FileSystemResource does not strictly follow the Resource#isReadable() contract #36585
  • Query not hidden in DefaultClientResponse checkpoint #36571
  • LazyConnectionDataSourceProxy does not pass on holdability to target Connection #36530
  • DefaultJmsListenerContainer may hang in an endless loop in doShutdown #36511
  • Inconsistent codings resolution in resource resolvers #36508

πŸ“” Documentation

  • Clarify semantics of HttpMethod.valueOf() #36653
  • Document that spring.profiles.active is 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

  • Upgrade to Micrometer 1.15.11 #36661
  • Upgrade to Reactor 2024.0.17 #36660

v7.0.6

Choose a tag to compare

@spring-builds spring-builds released this 13 Mar 08:27

⚠️ 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 ResourceHandlerUtils in ScriptTemplateView #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 in AbstractTestContextBootstrapper #36425
  • Further align synthesized annotation toString() with modern JDKs #36417
  • Introduce setDefaultCharset() in AbstractResourceBasedMessageSource #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 FullyQualifiedConfigurationBeanNameGenerator in Javadoc and reference docs #36455
  • Document @Fallback alongside Primary in the reference manual and @Bean Javadoc #36439
  • Fix links to UriComponentsBuilder and polish examples #36403
  • Emphasize @Configuration classes 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 BeanPostProcessor and BeanFactoryPostProcessor #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

Choose a tag to compare

@spring-builds spring-builds released this 13 Mar 08:15

⭐ New Features

  • Leverage ResourceHandlerUtils in ScriptTemplateView #36459
  • Restore ScriptTemplateViewTests #36457
  • Fix log message in ConfigurationClassBeanDefinitionReader #36454
  • Resolve context initializers only once in AbstractTestContextBootstrapper #36431
  • Exclude legacy @javax.validation.Constraint from 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 @Fallback alongside Primary in the reference manual and @Bean Javadoc #36441
  • Document registration recommendations for BeanPostProcessor and BeanFactoryPostProcessor #36436
  • Fix links to UriComponentsBuilder and polish examples #36406
  • Emphasize @Configuration classes over XML and Groovy in testing chapter #36394
  • Polish SpEL operator examples in reference docs #36375

πŸ”¨ Dependency Upgrades

  • Upgrade to JUnit 5.14.3 #36388
  • Upgrade to Micrometer 1.15.10 #36446
  • Upgrade to Reactor 2024.0.16 #36445

v7.0.5

Choose a tag to compare

@spring-builds spring-builds released this 18 Feb 13:03

⚠️ 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 AnnotatedMethod annotation 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 @Autowired as a meta-annotation #36315
  • Avoid duplicate required attribute lookup for @Autowired annotations #36314
  • Cache @ResponseBody presence per controller class in RequestResponseBodyMethodProcessor #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 Optional with 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 ListenableFuture in 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

Choose a tag to compare

@spring-builds spring-builds released this 12 Feb 09:33

⭐ New Features

  • Cache method annotations in MethodParameter and AnnotatedMethod #36307
  • Consistently support @Lazy as a meta-annotation at arbitrary depths #36306
  • Consistently support @Validated as 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 setPackagesToScan configuration method to LocalEntityManagerFactoryBean #36270
  • Remove outdated GraalVM substitution #36257
  • Introduce beforeRetry callback with RetryState argument #36245
  • Optimize NamedParameterUtils#buildValueArray by lazily fetching SqlParameter #36230
  • Allow customization of the ProxyFactory in HttpServiceProxyFactory used 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 DefaultMessageListenerContainer is 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#setDataSource work on Hibernate as well as EclipseLink #36271
  • StompBrokerRelayMessageHandler fails to restart due to test context pausing #36266
  • Deadlock might occur when calling System.exit on startup (against multiple shutdown hooks) #36260
  • Missing resource hint for BeanRegistrar implementing ImportAware #36242
  • Inconsistent behavior with @Retryable on annotated interfaces #36233
  • Netty4HeadersAdapter.remove returns empty list instead of null for non-existing key #36226
  • Generic type in AsyncTaskExecutor.submit(Callable) should be @Nullable #36191
  • EclipseLinkConnectionHandle can fail against transaction isolation race condition #36165

πŸ“” Documentation

  • Remove obsolete code in Redirecting to a resource section #36284
  • Fix formatting in Web MVC HTTP Message Conversion documentation #36250
  • Remove obsolete doc for spring.context.annotated-bean-reader.create #36241
  • Document @SpringExtensionConfig in 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#setPersistenceUnitName javadoc #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 DispatcherServlet snippets #36175
  • Replace getErrors() with getBindingResult() 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