Releases: spring-projects/spring-framework
v7.0.0-M8
⭐ New Features
- Only add
httpServiceProxyRegistrybean when necessary #35307 - Introduce
@Proxyableannotation for bean-specific proxy type #35296 - Introduce bean definition attribute for enforcing an interface-based proxy #35293
- Let Spring Boot consistently switch to CGLIB proxies for any proxy processor (including
@Retryable,@Asyncetc.) #35286 - HTTP method support in MappedInterceptor #35273
- Post process outgoing messages in JmsClient #35271
- Introduce
ConfigurableApplicationContext.pause()andSmartLifecycle.isPauseable()#35269 - Provide support to configure request interceptors in RestTestClient #35268
- Provide more control over validation in DefaultApiVersionStrategy #35267
- PathApiVersionResolver should not be nullable #35265
- Replace
useRequestParamwithuseQueryParaminApiVersionConfigurerto align with client #35263 - Add support for MediaType in ApiVersionInserter #35259
- ApiVersionConfigurer misconfiguration is hard to detect when no version resolvers are added #35256
- Support HttpServiceClient annotation #35244
- Prefer mapping without version for requests without a version #35237
- Provide
@WebSocketScopeannotation and publicSCOPE_WEBSOCKETconstant (for consistency with@RequestScopeand co) #35235 - Allow getting receipt from StompSession.Subscription.unsubscribe() #35224
- Support wildcard path elements at the start of path patterns #35213
- Improve handling of request parameter without values in MockMvc #35210
- Display original request URI in NoResourceFoundException message #34553
- Add RestTestClient #34428
- Support Hibernate StatelessSession [SPR-2495] #7184
🐞 Bug Fixes
- Fix
JacksonJsonSockJsMessageCodecimports #35309 - IllegalStateException: No API version attribute #35236
📔 Documentation
- Document constraints for HTTP range requests #35227
🔨 Dependency Upgrades
- Upgrade to Hibernate ORM 7.1 #35308
- Upgrade to Jackson 3.0.0-rc6 and 2.19.2 #35228
- Upgrade to Jackson 3.0.0-rc8 and 2.20.0-rc1 #35295
- Upgrade to Jetty 12.1.0.beta3 #35233
- Upgrade to Micrometer 1.16.0-M2 #35311
- Upgrade to Reactor 2025.0.0-M6 #35310
❤️ Contributors
Thank you to all the contributors who worked on this release:
@FBibonne, @NeatGuyCoding, @SRIRAM9487, @Songdoeon, @philwebb, and @rworsnop
v6.2.10
⭐ New Features
- Optimize NIO path resolution in
PathEditor#35304 - Make
typeinProblemDetailnullable #35294 - Refine UriUtils#decode and StringUtils#uriDecode implementation and documentation #35253
- Provide configurable
useCachesoption forURLConnectionusage inUrlResource(avoiding jar file leak) #35218
🐞 Bug Fixes
@Scheduledtasks running inSimpleAsyncTaskSchedulerare interrupted immediately on context close #35254ScriptUtils.executeSqlScript()does not support multiple results per statement #35248- Successful Autowiring Dependent on Configuration ordering and Primary Bean flag #35239
- Locale parameter in MessageSource#getMessage methods should be nullable #35230
- Allow any
@Transactionalpropagation for@TransactionalEventListenerwith BEFORE_COMMIT phase #35150 - Catalog name should be handled with the provided case #35064
- Accept support for generated keys column name array on HSQLDB and Derby as well #34790
- Handle direct CanncelationException on timeout in JdkClientHttpRequest #34721
📔 Documentation
- Add documentation of RequestMapping about SpEL #35232
- Document SqlBinaryValue behaviour with PostgreSQL #34786
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Allan-QLB, @carsago, @cw-dimedis, and @giampa91
v7.0.0-M7
⭐ New Features
- LocalDataSourceJobStore should re-initialize statically registered Quartz ConnectionProvider on context restart #35208
- Make rootObject parameter consistently nullable #35206
- Refine multipart converter registration in HttpMessageConverters #35203
- Introduce
getSource()inApplicationContextEventwith covariant return type #35197 - Introduce
ContextRestartedEventas a subtype ofContextStartedEvent#35194 - Align HttpMessageConverters builder with WebFlux codecs variants #35187
- Transaction-scoped resource binding in
TransactionSynchronizationManager#35182 - Use flexible generics nullness in
RestClient.RequestHeadersSpec.ExchangeFunction#35180 - Introduce
ConfigurableApplicationContext.restart()method #35171 - Pause unused application contexts in the TestContext framework #35168
- Skip initialization of a
NullBean#35165 - Short-circuit matching algorithm in
InstanceFilter#35161 - Support direct matching against exceptions in
ExceptionTypeFilter#35160 InstanceFilterandExceptionTypeFiltershould setmatchIfEmptytotrueby default #35158- Require explicit constraints in
@Contract#35157 - Specify fetchSize/maxRows/queryTimeout per statement in JdbcClient #35155
- Include MethodParameter[] parameters in HttpRequestValues.Processor #35148
- Deprecate
DaoSupportclasses #35145 - Remove
maxDuration/maxElapsedTimesupport fromRetryPolicy#35144 - Introduce
@ConcurrencyLimitannotation based onConcurrencyThrottleInterceptor#35133 - Consistently implement
toString()inBackOffstrategies #35120 - Support API versioning for functional endpoints #35113
- Migrate
orm.hibernate5toorm.jpa.hibernatepackage for Hibernate ORM 7.0 #35111 - Redesign
RetryPolicyto directly incorporateBackOff#35110 - Ability to limit list of supported API versions to explicitly configured ones for Spring MVC #35105
- Refine nullability of
PropertyResolver.getProperty(key: String)extension #35104 - Support for exposing additional object types in
SmartFactoryBean#35101 - Add missing
@NullabletoMethodInvoker::setArgumentsparameter #35089 - Support
@RequestBodyin interface method when computing "consumes" condition #35086 - Consistent validation of supported API versions #35082
- Resolve optional HandlerMethod parameter of
@ExceptionHandlermethod to null #35067 - Add ability to decorate HttpExchangeAdapter through HttpServiceProxyFactory #35059
- Introduce
BuilderAPI and factory methods forRetryPolicy#35058 - Revise
RetryTemplatefor alignment with Reactor (in preparation for@Retryable) #35057 - Add ApiVersionResolver based on parameter in media type #35050
- Support deprecation information in API versioning #35049
- Add support for configuring
SslInfoinWebTestClient#35042 - Make built-in
RetryPolicyimplementationsfinal#35040 - Specify flexible generics nullness in spring-jdbc #34911
- Allow usage of
@CheckReturnValueon types and constructors #34910 - Support repeatable writes in FormHttpMessageConverter#writeMultipart #34859
- Convert applicable methods in
Scopetodefaultmethods #34757 - Add public method to get bean order #34712
- Discard further rows once maxRows has been reached #34709
- Support
DefaultWebFilterChainallowing the current filter to provide its name explicitly #34702 - API Versioning Support #34565
- Introduce
@RetryableAOP support (based oncore.retryand Reactor retry functionality) #34529 - Revisit converters and codecs default setup in HTTP stacks #33894
ConfigurationBeanNameGeneratorfor@Bean-annotated methods #33448- Qualified
EntityManager/EntityManagerFactoryinjection (aligned with Jakarta Persistence 3.2) #33414 - Introduce JmsClient with customizable send/receive operations #32501
- Allow conditional handling of 404 with HTTP Interface clients #32105
- Allow to set TTL (and other QoS-related settings) on a per-message (and/or per-send) basis #26840
🐞 Bug Fixes
- Allow ordering of
HttpMessageConverterss throughWebMvcConfigurer.configureMessageConverters(HttpMessageConverters.Builder)#35177 - Content-Disposition response header duplicated for failed StreamingResponseBody #35116
- CachingMetadataReaderFactory does not cache all metadatareader calls #35112
sslInfo()should return the builder forMockServerHttpRequest#35075- HttpService group adapters could not be instantiated in a native image #35038
📔 Documentation
- Improve URLs in Validation chapter of the reference manual #35181
- Update Spring MVC message converters documentation #35166
- Add a note about Field/Method vs. TYPE_USE annotations in reference docs #35098
- Document intention of
toString()inHandlerMethod#35055 - Add section in docs on byte-range requests in Spring MVC and WebFlux #35052
🔨 Dependency Upgrades
- Upgrade to Jetty 12.1.0.beta1 #35084
- Upgrade to Kotlin 2.2.0 #34453
- Upgrade to Micrometer 1.16.0-M1 #35170
- Upgrade to Reactor 2025.0.0-M5 #35169
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Allan-QLB, @NeatGuyCoding, @OlgaMaciaszek, @Pankraz76, @izeye, @ngocnhan-tran1996, @quaff, @remeio, @renatomameli, @scordio, and @wonyongg
v6.2.9
⭐ New Features
OncePerRequestFiltercannot be CGLib-proxied #35198- Consistently catch
InaccessibleObjectExceptionnext toIllegalAccessException#35190 - Introduce
Date-to-InstantandInstant-to-Dateconverters #35175 - Consistent nullability and exception declarations in
AbstractMessagingTemplatehierarchy #35159 - Register runtime hints for
Instant-to-Timestampconversion #35156 - Improve handling of
ResponseEntity<?>in Spring MVC #35153 - Support
@CacheConfig("myCacheName")declarations for simplified configuration #35152 - Declare
messageSelectorparameters inJmsOperationsas@Nullable#35151 - Add getter for
OverflowStrategyinConcurrentWebSocketSessionDecorator#35132 - Use preset Content-Type for streaming and reactive responses in Spring MVC #35130
- Leniently tolerate null
@Aspectbean #35074 DataAccessResourceFailureExceptionthrown when transaction times out on PostgreSQL #35073MethodInvokingFactoryBeanfails to invoke publicly exported methods overridden by internal classes when using JPMS #34028
🐞 Bug Fixes
- Restore preference for interface (most abstract) method in
getPubliclyAccessibleMethodIfPossible#35189 - Make
targetBeanNamefield in AbstractBeanFactoryBasedTargetSourceprotectedto avoid exceptions in logging andtoString()#35172 - Fix inconsistencies in
StaticListableBeanFactory#35119 - Support StreamingHttpOutputMessage in RestClient #35102
- When building
DELETErequests, the request body is not used inJdkClientHttpRequest.buildRequest#35068 - AOT-generated bean registration file contains "too many constants" when building with many beans #35044
- Prevent cache pollution by storing only the factories #34732
- WebFlux decodes wildcard content-types as form-data/multipart #34660
- AOT-generated CGLib proxies do not contain method overrides #34642
- 500 response for ResourceHttpRequestHandler when requested range is not satisfied #34490
📔 Documentation
- Document how to register runtime hints for convention-based conversion #35178
- Link to
@ContextConfigurationJavadoc from reference manual #35088
🔨 Dependency Upgrades
- Upgrade to JUnit 5.13.3 #35103
- Upgrade to Micrometer 1.14.9 #35202
- Upgrade to Reactor 2024.0.8 #35201
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Meijuh, @RazorNd, @chenggwang, @izeye, @mjd507, @ngocnhan-tran1996, and @philwebb
v7.0.0-M6
⭐ New Features
- Allow
FixedBackOffto be constructed with only a custom interval #35028 - Use String.replace in MetadataEncoder #35025
- Revise
@Nullabledeclarations forcontains*()methods inCollectionUtils#35023 - Introduce
JacksonJsonMessageConverter.getObjectMapper()#34963 - Remove
(String, String)variants ofsetProperty()andwithProperty()fromMockEnvironment#34948 - Allow access to
envfromSupplierContextDsl#34943 - Consistently declare nullability
@Contractfor core utilities #34934 - Update HttpServiceGroupConfigurer API #34926
- Make
ProblemDetailJacksonXmlMixincompatible with Jackson 3 #34925 - Introduce hints in
RestClientAPI #34924 - Add Kotlin body advices #34923
- Add support for callable references to
BeanRegistrarDsl#34922 - Additional updates for API versioning in test and client support #34919
- Define nullability
@ContractforquoteandgetFilenameinStringUtils#34896 - Support
@Importon interfaces #34820 - Use HexFormat in CharacterEditor #34798
- Use HexFormat in ContentDisposition #34797
- Introduce minimal retry functionality as a core framework feature #34716
- Add support for "application/*+x-protobuf" media type #34645
- Support OutputStream and InputStream in HTTP Interface clients #32358
🐞 Bug Fixes
@ContractforSupplierUtils.resolve(Supplier)incorrectly declares!null -> !null#34987- Consistent null check on injection points for pre-existing singleton beans #34952
📔 Documentation
- Refine null-safety documentation terms #34982
- Stop referring to JUnit 5 in documentation #34970
- Fix typos in API versioning #34961
- Add missing
sinceattributes for@Deprecateddeclarations #34942 - Improve Javadoc for
getFilename()andgetFilenameExtension()inStringUtils#34932 - Add documentation for HTTP service proxy registry #34912
- Update outdated JettyHttpHandlerAdapter example in reference documentation #34877
🔨 Dependency Upgrades
- Upgrade to Jackson 3.0.0-rc5 #34945
- Upgrade to Jetty 12.1.0.beta0 #34930
- Upgrade to Kotlin 2.2.0-RC2 #34946
- Upgrade to Micrometer 1.15.1 #35019
- Upgrade to Netty v4.2.2.Final and Reactor 2025.0.0-SNAPSHOT #34996
- Upgrade to Reactor 2025.0.0-M4 #34997
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Tussle0410, @doroszkiewicz, @fmbenhassine, @hgh1472, @izeye, @kilink, @kssumin, @kwondh5217, @quaff, @scottfrederick, and @violetagg
v6.2.8
⭐ New Features
- Nullability
@Contractdeclaration forCodeFlow.isIntegerForNumericOp()is unnecessary #34985 - Serializer hint registration is broken for some Kotlin classes #34979
- Clients created using JdkClientHttpRequestFactory set content-length for GET, DELETE and HEAD requests #34971
- Support registration of non-public
BeanDefinitionReadervia@ImportResource#34928 - Make max size for pattern cache in
PathPatternMatchableHandlerMappingconfigurable #34918 - Add optimized DataBufferInputStream overrides #34799
🐞 Bug Fixes
- Encode non-printable character in Content-Disposition parameter #35034
- Allow update of existing
WebSessionafter max sessions limit is reached #35013 - Fix support for collections in
AbstractKotlinSerializationHttpMessageConverter#34992 - PathPattern#combine throws StringIndexOutOfBoundsException #34986
- Fix AOT code generation for autowired inner class constructor #34974
- AbstractFileResolvingResource.exists closes JAR resource input streams with v6.2.7 #34955
- Enhanced configuration class fails to call package-visible superclass constructor on WebSphere #34950
- Fix
REPLY_CHANNELheader check inMessageHeaderAccessor#34949 MockEnvironmentdoes not acceptObjectproperty values #34947PropertySourcesPlaceholderConfigurerno longer usesConversionServicefromEnvironment#34936@ContractforStreamUtils.drain()incorrectly declaresnullresults in an exception #34933- Inconsistent behavior injecting null
@Beanfactory parameter #34929 - MockHttpServletRequest.addHeader duplicates "Content-Type" header #34913
- BeanUtils.getParameterNames fails for Kotlin data classes #34760
- JAXB message converters ignore Content-Type charset #34745
- Aspect Not Triggered After Restart in Spring Boot 3.4.x (But Works in 3.3.10) #34735
- Add caching headers to unmodified static resources #34614
📔 Documentation
- Apply gh-34856 to MockClientHttpRequest in testfixture package #35031
- Fix
ResourceHttpRequestHandler#setHeadersJavaDoc #35004 - Remove reference to AspectJ Eclipse Javadoc #35000
- Mention CompletableFuture in Spring MVC "Asynchronous Requests" section of reference manual #34991
- Fix exception name in ModelAttribute docs #34980
- Fix syntax in
@SqlGroupexample #34972 - Update X-Forwarded-Proto doc to say https / http #34959
- Update Guidance on Best Practices To Test Code That Uses RestClient and RestTemplate #34892
- Add a section for WebAsyncTask in mvc-ann-async.adoc #34885
- Clarify what
@RestControllerAdvicevs@ControllerAdviceapply to by default #34866 - Improve Javadoc for
@ExceptionHandler#34554
🔨 Dependency Upgrades
- Upgrade to HttpComponents HttpClient 5.5 #34941
- Upgrade to Micrometer 1.14.8 #35020
- Upgrade to Reactor 2024.0.7 #35021
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Allan-QLB, @Aurh1l, @BowieDu, @DhruvTheDev1, @Dongnyoung, @JimmyAx, @addoDev, @dmitrysulman, @izeye, @jjank, @kilink, @mbazos, @msnsaeed71, @ngocnhan-tran1996, @nosan, @remeio, @vpavic, and @yuzawa-san
v6.1.21
🐞 Bug Fixes
- Encode non-printable character in Content-Disposition parameter #35035
- Allow update of existing
WebSessionafter max sessions limit is reached #35018 - Enhanced configuration class fails to call package-visible superclass constructor on WebSphere #34951
🔨 Dependency Upgrades
- Upgrade to Reactor 2023.0.19 #35022
v7.0.0-M5
⭐ New Features
- Deprecate
PropertyPlaceholderConfigurerandPreferencesPlaceholderConfigurerfor removal #34880 - Add Consumer based variant methods to HttpRequestValues builder #34870
- Add defaultApiVersion to RestClient and WebClient builders #34857
- Evaluate system properties in default HttpClient in ReactorClientHttpRequestFactory #34850
- Use beanClassLoader in the HTTP Service Registrar #34846
- Deprecate JUnit 4 support in the Spring TestContext Framework #34794
- Ability to validate supported API versions only against explicitly configured ones #34775
- Revisit Jackson support #33798
🐞 Bug Fixes
ClassFileAnnotationMetadata.fromTypeDescriptor(…)fails on Java 24 #34882- Align ClassFileClassMetadata with other implementations #34869
- Incorrect filtering of groups with HttpServiceGroupConfigurer #34867
- Aggregated Javadoc no longer published since 7.0.0-M4 #34774
📔 Documentation
- Add Reference Documentation for API Versioning #34569
🔨 Dependency Upgrades
- Upgrade to Kotlin 2.1.21 #34900
- Upgrade to Micrometer 1.15.0 #34888
- Upgrade to Reactor 2025.0.0-M3 #34897
❤️ Contributors
Thank you to all the contributors who worked on this release:
@dmitrysulman, @philwebb, and @siom79
v6.2.7
⭐ New Features
- Forward more methods to underlying InputStream in NonClosingInputStream #34893
- Introduce Spring property for the default property placeholder escape character #34865
- Close ApplicationContext once AOT processing has completed #34841
- Fix
AbstractJackson2HttpMessageConverter#getObjectMappersForTypenullness #34811 - Add option for case-insensitive match to PatternMatchUtils #34801
- RestClient
@RequestBodyparameters lose generic type information when creating HTTP service beans #34793 - Adds option to set Principal in MockServerWebExchange #34789
🐞 Bug Fixes
- Beans created by FactoryBean are not considered as autowiring candidates if another thread holds a singletonLock #34902
PropertySourcesPlaceholderConfigurerplaceholder resolution fails in several scenarios #34861- HttpComponentsClientHttpRequestFactory setConnectionRequestTimeout not working with httpclient 5.3.1 #34851
- Fragment.create() requires mutable map - which is unusable when used with Kotlin #34848
- Duplicate
BeanOverrideHandlerdiscovered in@Nestedtest case with superclass from different class or in interface implemented multiple times #34844 - Accidental ClassLoader defineClass enforcement after #34677 #34824
- HttpEntity.EMPTY headers should not be possible to mutate via HttpHeaders constructor #34812
- AbstractFileResolvingResource.exists incorrectly reports result for resources inside of spring-boot executable jar #34796
- Correctly expand query param with same name from URI variables array #34783
- R2DBC
NamedParameterUtilsonly expands reused collection parameter once #34768 PathMatchingResourcePatternResolverwrongly assumes thattarget/classesalways exists #34764
📔 Documentation
- Clarify
CompositePropertySourcebehavior forEnumerablePropertySourcecontract #34886 - Javadoc and
@Nullableannotation forservletContextparameter ofConfigurableWebEnvironment.initPropertySourcesare contradictory #34845 - Spring MVC:
@EnableAsyncneeds to be redeclared for each ApplicationContext #34843 - Provide a working example instead of unclear placeholders #34828
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Artur-, @blake-bauman, @iifawzi, @kilink, @quaff, @whlit, and @zzoe2346
v6.1.20
⭐ New Features
- Add option for case-insensitive match to PatternMatchUtils #34802
🐞 Bug Fixes
- HttpComponentsClientHttpRequestFactory setConnectionRequestTimeout not working with httpclient 5.3.1 #34854
- Accidental ClassLoader defineClass enforcement after #34677 #34839
📔 Documentation
- Clarify
CompositePropertySourcebehavior forEnumerablePropertySourcecontract #34887
🔨 Dependency Upgrades
- Upgrade to Reactor 2023.0.18 #34899