Releases: spring-projects/spring-framework
v5.3.28
β New Features
- ClassLoader can be null in DeserializingConverter and should be annotated with
@Nullable
#30672 - Performance optimization in AbstractBeanFactoryBasedTargetSource.hashCode() #30585
- Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30441
- Reject null and empty SpEL expressions #30373
- Introduce
Environment.matchesProfiles()
for profile expressions #30226
π Bug Fixes
- Change of behaviour for UUID in bean validation output in v5.3.27 #30662
- Spring Framework 5.3.27 appears to cause issues in OSGi environment #30637
- Inconsistent ProxyCallbackFilter#equals/hashCode methods in CglibAopProxy #30616
- EclipseLinkJpaDialect: Unexpected default isolation levels #30589
- ThreadLocalTargetSource does not include actual target bean name in NamedThreadLocal #30586
- ApplicationListenerMethodAdapter inconsistently publishes events from CompletableFuture #30584
- For
@Bean
method that returnsnull
,@Autowired
injectsNullBean
instead ofnull
for cached arguments #30551 - Make maximum SpEL expression length configurable #30446
- Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30443
π Documentation
- Document which
@Scheduled
attributes support SpEL expressions #30642 - FileSystemUtils::deleteRecursively Javadoc refers to File instead of Path #30555
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.33 #30656
v6.0.9
β New Features
- Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30440
- Introduce internal constants for implicit bounds in TypeUtils #30423
- Update major/minor version properties in
MockServletContext
#30395 - Reject null and empty SpEL expressions #30371
- Support Test AOT processing with GraalVM tracing agent and Native Build Tools #30281
- Introduce
Environment.matchesProfiles()
for profile expressions #30206 - Optimize MultiValueMap iteration operations #29972
π Bug Fixes
- Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30442
- Qualifiers registered programmatically are not supported by AOT #30410
- Support for
InjectionPoint
in bean factory methods when using AOT #30401 - Bean methods with generic array/varargs parameters break native compilation #30407
ApplicationListenerMethodAdapter
supports non-matching generic events #30399- Processing several
@PersistenceContext
injection points on the same class with AOT generates code that does not compile #30437 - Make maximum SpEL expression length configurable #30380
- Record beans do not compile to native images #30383
- Missing resource hint for
@PropertySource
#value #30376 - ApplicationEventPublisher - PayloadApplicationEvent not received by EventListener if event fired from child context #30360
- StringDecoder.decode() should release chunks on cancellation #30299
- Quote '?' in Quoted Printable filename #30252
- Missing reflection hint for custom
PropertySourceFactory
in native image #30175 - Aot generated sources fail to compile with 'File name too long' error #29846
π Documentation
- Update
package-info
for CGLIB fork #30461 - Clarify differences between GenericBeanDefinition and RootBeanDefinition #30444
- Document how to configure FactoryBean with a configurable target with AOT #30434
- Add Antora docs-build branch #30415
- Switch the reference documentation to Antora #30414
@ResponseStatus
documentation incorrect #30305
π¨ Dependency Upgrades
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@divcon, @izeye, @luozhenyu, @rwinch, @sigee, and @yuzawa-san
v6.0.8
β New Features
- Disable variable assignment in SimpleEvaluationContext #30326
- Limit SpEL expression length #30325
- Limit string concatenation in SpEL expressions #30324
- Introduce
StringUtils.truncate()
#30290 - Introduce
ObjectUtils.nullSafeConciseToString()
#30286 - Introduce assertions against
Cookie
attributes inCookieResultMatchers
forMockMvc
#30285 - Polishing #30267
- Support
SameSite
cookie attribute inMockMvcHttpConnector
#30264 - Update
MockCookie
to make use of Servlet 6.0 APIs and semantics for "attributes" #30263 - Refine
initRequestBuilder
inDefaultWebClient
#30254 - HttpServerErrorException contains not-serializable field of type DefaultResponseErrorHandler #30224
- Add class hints for Jackson annotations on fields and methods #30208
- Add
HttpMethod
reflection hint toObjectToObjectConverterRuntimeHints
#30201 - Improve performance of canRead() in HttpMessageReader's #30192
- Optimize array creation in SpEL
ConstructorReference
#30189 - ConstructorResolver error hints about mixing indexed and named args #30169
- Replace
Collections.unmodifiableList(new ArrayList(..))
withList.copyOf()
#30166 - Add assert null validations for DefaultServerResponseBuilder #30157
- Use
InputStream.readAllBytes()
inFileCopyUtils.copyToByteArray()
#30155 - Cache ServerHttpRequest::getMethod in AbstractServerHttpRequest #30139
- Use String.equals() in LiteralPathElement #30138
- Optimize some iterations in BodyExtractor and BodyInserter #30136
- Add a couple missing java.time types to StatementCreatorUtils #30123
- WebClient observations should not record CANCEL signals as aborted if response was received #30070
- Destroy method not found in native image if concrete bean type is not exposed #29545
- Contribute init/destroy lifecycle introspection hints for registered beans #29246
π Bug Fixes
- NPE thrown for nonexistent
default-destroy-method
in XML config #30301 - Fix comparison of
title
inequals()
andhashCode()
ofProblemDetail
#30294 - SSE breaks with indenting serializer in WebMvc.fn #30277
@HttpExchange
interface does not resolve return type correctly while using with suspending methods #30266- Increase max regex length in SpEL expressions #30265
- Missing response information from client observation context when filter functions fail #30247
- NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30245
- Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30220
- Refine generic type management in
AbstractMessageWriterResultHandler
#30214 - MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30210
- Encode IPV6 Zone IDs (%) in ReactorServerHttpRequest #30188
- Handle all exceptions for stored proc output param retrieval in
SharedEntityManagerCreator
#30161 - Fix IllegalArgumentException that prevents STOMP DISCONNECT from reaching the client #30120
- TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30115
π Documentation
- Add since tags to sameSite() and attribute() in CookieResultMatchersDsl #30308
- Fix incorrect jakarta.inject artifact version #30270
- Fix
@PathVariable
reference documentation code snippets #30243 - Use diamond operator in examples in reference manual #30204
- Fix example in Javadoc for
@EnableWebSocket
#30183 - Fix anchor in link to "Web on Reactive Stack" chapter #30158
- Documentation for Vavr's Try method to trigger transaction rollbacks #30108
- Document that WebClient defaultStatusHandler do not apply to exchange* methods #30059
π¨ Dependency Upgrades
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@1993heqiang, @TAKETODAY, @ZouHongxue, @alexjansons, @divcon, @edyda99, @filipblondeel, @ghostg00, @giuseppemilicia, @izeye, @justin-tay, @krzyk, @kyuarl21, @quaff, @shitian9, @simonbasle, @srivatsa-cfp, @ssang1105, @stsypanov, @wizard4wu, and @yuzawa-san
v5.3.27
β New Features
- Limit string concatenation in SpEL expressions #30331
- Limit SpEL expression length #30329
- Disable variable assignment in SimpleEvaluationContext #30327
- Introduce
StringUtils.truncate()
#30291 - Introduce
ObjectUtils.nullSafeConciseToString()
#30287 - Make
HttpComponentsHeadersAdapter#getFirst
nullable #30269
π Bug Fixes
- Fix regression in ReactorServerHttpRequest related to IPV6 Zone id with "%" #30314
- SSE breaks with indenting serializer in WebMvc.fn #30302
- Increase max regex length in SpEL expressions #30298
- NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30246
- Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30235
- TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30228
- Refine generic type management in
AbstractMessageWriterResultHandler
#30215 - MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30212
- Handle all exceptions for stored proc output param retrieval in
SharedEntityManagerCreator
#30164
π Documentation
- Fix
@PathVariable
reference documentation code snippets #30258 - Fix example in Javadoc for
@EnableWebSocket
#30187 - Fix anchor in link to "Web on Reactive Stack" chapter #30163
π¨ Dependency Upgrades
- Upgrade to Reactor 2020.0.31 #30315
v5.2.24.RELEASE
v6.0.7
β New Features
- Improve diagnostics in SpEL for
matches
operator #30144 - Improve diagnostics in SpEL for repeated text #30142
- Increase scope of regex pattern cache for the SpEL
matches
operator #30140 - Minor updates in HandlerMappingIntrospector #30127
- Skip parameter name resolution when not needed in
AbstractAutowireCapableBeanFactory
#30103 - Remove extra copy of headers/cookies in WebClient #30092
- Assert non-null arguments in
DefaultServerRequestBuilder
methods #30046 - Jetty 12 support in WebFlux #29575
π Bug Fixes
- Gradle task
processAot
fails when Bean Validation API present but no provider found #30130 - ContentDisposition::parse does not support Windows paths #30111
- BindException raised instead of MethodArgumentNotValidException subclass #30100
- Ensure reactive transaction rollback on commit error #30096
- CaffeineCacheManager getCache method cause thread block #30066
- RequestedContentTypeResolver does not ignore quality factor when filtering */* media types #29915
@Autowired
/@Value
does not work on inner bean in native #29803- Avoid rollback after a commit failure in
TransactionalOperator
#27572 - SpEL: cannot call methods declared in
java.lang.Object
on a JDK proxy #25316
π Documentation
- Add anchor rewrites in the reference documentation #30132
- Fix minor spacings in webflux docs #30078
- Add a list of observations produced by Spring Framework #30060
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.5 #30133
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@EnricSala, @MrCoffee77, @abelsromero, @edyda99, @liupeng12345, @srivatsa-cfp, and @yuzawa-san
v5.3.26
β New Features
- Improve diagnostics in SpEL for
matches
operator #30145 - Improve diagnostics in SpEL for repeated text #30143
- Increase scope of regex pattern cache for the SpEL
matches
operator #30141 - Minor updates in HandlerMappingIntrospector #30128
- Allow SnakeYaml 2.0 runtime compatibility #30097
- Add missing
@Nullable
annotations toLogMessage.format
methods #30009 - ASM upgrade for JDK 20/21 support #29966
- Allow MockRest to match header/queryParam value list with one Matcher #29964
- Add
MockMvc.multipart()
Kotlin extensions withHttpMethod
#29941 - Release R2DBC connection when cleanup fails in transaction #29925
- org.springframework.web.context.ContextLoader should lazily load ContextLoader.properties #29909
- Improve generated default name for
@JmsListener
subscription #29902 - Include all Hibernate query methods in
SharedEntityManagerCreator
'squeryTerminatingMethods
set #29888 - SQL supplier in R2DBC
DatabaseClient
is eagerly invoked #29887 - Spring Framework 5.3.x is incompatible with Jetty 10 (Client) #29867
- Possible infinite forward loop with MockMvcWebConnection #29866
- Refine
Jackson2ObjectMapperBuilder#configureFeature
exception handling #29860 - Fix R2dbcTransactionManager debug log: don't log a Mono #29824
π Bug Fixes
- RequestedContentTypeResolver does not ignore quality factor when filtering */* media types #30121
- SpEL: cannot call methods declared in
java.lang.Object
on a JDK proxy #30118 - CaffeineCacheManager getCache method cause thread block #30085
- Protect JMS connection creation against prepareConnection errors #30051
- ReactorServerHttpRequest does not reflect forwarded host and port when
forwarding-header-strategy=native
or cloud platform detected #29974 - WebSocket stats not updated correctly when sessions cleared #29947
- Explicit target ClassLoader for interface-based proxies in MvcUriComponentsBuilder #29914
- Closing an ApplicationContext leads to Exception at ExecutorServiceAdapter #29908
- Invalid Accept header results in IllegalStateException #29836
- JettyWebSocketCreator referenced from a method is not visible from class loader with
Jetty10RequestUpgradeStrategy
#29256
π Documentation
- Fix minor spacings in webflux docs #30095
@AspectJ
argument name resolution algorithm is outdated in reference manual #30057- Fix "Configuring a Global Date and Time Format" example #30036
- Consistent
@Bean
method return type for equivalence with XML example #29970 - Update
@DynamicPropertySource
examples regarding changes in Testcontainers #29940 - Clarify semantics of
primitivesDefaultedForNullValue
inBeanPropertyRowMapper
#29926 - Clearly document that
DataClassRowMapper
supports Java records #29922 - Outdated Javadoc for AbstractApplicationContext.postProcessBeanFactory #29916
π¨ Dependency Upgrades
- Upgrade to Reactor Netty 2020.0.30 #30116
5.2.23.RELEASE
v6.0.6
β New Features
- Prefer request hostName and hostPort in ReactorServerHttpRequest #30062
- Use
readNBytes
in ByteArrayHttpMessageConverter when contentLength is available #30010 - Add missing
@Nullable
annotations toLogMessage.format
methods #30006 - Refine
CoroutinesUtils#invokeSuspendingFunction
contract #30005 @SubscribeMapping
method not called when built as native image #30002- Provide method with
ContextView
instead ofContext
inServerWebExchangeContextFilter
#29691 - Support
@Value
for record injection #28774
π Bug Fixes
- WebClient now requires scheme #30053
- Move
HttpServiceProxyFactoryExtensions.kt
tospring-web
module #30042 - AutowireCapableBeanFactory.createBean does not prefer default constructor anymore #30041
- Server request URL with spring-webflux 6.0.5 is in resolved IP6 format #30033
PathMatchingResourcePatternResolver
can no longer handle paths containing spaces and special characters #30031- Catch defensively exception thrown by validation contraints AOT processing of Kotlin extensions #30037
- Fix proxy hint Kotlin extensions #30025
- WebFlux fails with WebDAV HTTP methods #29981
NullPointerException
if passing an anonymous class toReflectionsHint#registerType
#29774- Native hints for package private methods on custom
@Repository
class #29764 - Native version of webflux/r2dbc failed #29582
- Protect JMS connection creation against prepareConnection errors #29116
- SingleConnectionFactory - reconnection problem (AMQ Broker) #29115
π Documentation
- Fix "Configuring a Global Date and Time Format" example #30034
@AspectJ
argument name resolution algorithm is outdated in reference manual #30026- Update comment in Javadoc of ServletRequestPathFilter DispatcherServlet relating to DispatcherServlet #30014
- Revise AspectJ examples in the reference manual #30003
- Revise
chomp
andfold
settings in reference documentation #30001
π¨ Dependency Upgrades
- Upgrade to Reactor 2022.0.4 #30063
β€οΈ Contributors
Thank you to all the contributors who worked on this release:
@1004789224, @1993heqiang, @AlexElin, @diguage, @divcon, @izeye, @kilink, @lenoch7, @sergiuprdn, @singhbaljit, and @violetagg
v6.0.5
β New Features
- Add RFC-8246 "immutable" attribute to
CacheControl
#29955 - Allow MockRest to match header/queryParam value list with one Matcher #29953
- DataBuffer should offer restricted access to underlying ByteBuffer #29943
- Introduce
HttpServiceProxyFactory#createClient
Kotlin extension #29942 - Support ProblemDetail serialization to XML with Jackson #29927
- Refine
TransactionalOperator.executeAndAwait
nullability #29919 - Early support for JDK 21 #29910
- StringDecoder causes direct allocation of ByteBuffer #29889
- Include all Hibernate query methods in
SharedEntityManagerCreator
'squeryTerminatingMethods
set #29886 - Add native support for RSocketExchange. #29877
- Add
@Nullable
toProblemDetail.setProperty
value argument #29868 - Deprecate obsolete
ConcurrentExecutorAdapter
for removal in 6.1 #29865 - ContentDisposition.toString() should include both regular and extended filename parameter #29861
- Refine
Jackson2ObjectMapperBuilder#configureFeature
exception handling #29859 - Flexible constructor resolution in AutowireCapableBeanFactory.createBean(Class) #29855
- Optimize CorsConfiguration::checkHeaders #29853
- Spring Web RestTemplate
http.client.requests
Metrics No Longer Haveclient.name
Tag #29839 - Allow
@Aspect
classes to extend concrete@Aspect
classes #29830 - Custom Constraint Validator not work with native image #29823
- Deprecate HttpStatus 103 CHECKPOINT in favor of new EARLY_HINTS #29816
- Fix R2dbcTransactionManager debug log: don't log a Mono #29800
- Improve generated default name for
@JmsListener
subscription #29790 - Support double-quoted values in HttpHeaders::getValuesAsList #29785
- Support method validation for an interface only proxy like an HTTP interface client #29782
- ResourceHandlers cannot resolve static resources without wildcard patterns #29739
- Release R2DBC connection when cleanup fails in transaction #29703
- Spring Webfilters and Kotlin Coroutines #29672
- Support "multipart/mixed" and "multipart/related" in DefaultServerWebExchange #29671
@JsonDeserialize(builder = ...)
does not work in GraalVM native image #29646- Combined class and method
@RequestMapping
without patterns should match root path as both "" and "/" #29625 - Prefer problem detail media type independent of ordering in Accept header #29588
- Restrict forwards in MockMvcWebConnection to 100 #29557
@JsonNaming
strategy is not supported in GraalVM native image #29386- SQL supplier in R2DBC
DatabaseClient
is eagerly invoked #29367 - Set reason for WebSocket
CloseStatus.SESSION\_NOT\_RELIABLE
#29220 - HttpComponentsClientHttpConnector hangs when host is invalid #29156
- Add ResponseEntity.ofNullable() to deal with non-Optional nullable objects #29117
- Provide access to all configured interceptors in AbstractHandlerMapping #28985
- Support
Optional
inPayloadMethodArgumentResolver
#28945 - Remove clear() call to release method of WeakEntryReference and SoftEntryReference #28863
- Add
MockMvc.multipart()
Kotlin extensions withHttpMethod
#28634 - WebSocketConnectionManager constructor with prepared URI #28524
- Deprecate Base64Utils #28434
- List supported media types in HttpMediaTypeNotSupportedException when given invalid input media types #28062
- Introduce getContentAsString and getContentAsByteArray to Resource #24651
- Support Optional in Jackson 2 message converters #24498
- Refine
ModelAttributeMethodProcessor
Kotlin exception handling #23846
π Bug Fixes
- DefaultHandlerExceptionResolver::doResolveException no longer returns ModelAndView customized via protected method #29971
ex.getPropertyName()
is not initialized inResponseEntityExceptionHandler#handleTypeMismatch
#29959- Violation of a unique index on insert in MSSQL is translated to DataIntegrityViolationException instead of DuplicateKeyException #29950
- PathMatchingResourcePatternResolver duplicates module/file resources #29934
- ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException in tests #29933
- Explicit target ClassLoader for interface-based proxies in MvcUriComponentsBuilder #29913
- org.springframework.web.context.ContextLoader cannot be loaded in a native image #29905
- MockHttpServletRequest InputStream has been made static in gh-29125 #29901
- MvcUriComponentsBuilder adds trailing slash if path is defined at controller level only #29897
- Closing an ApplicationContext leads to Exception at ExecutorServiceAdapter #29892
- Set WebClient Observation as current in reactor context #29891
- Client request observation contributes full URI template to uri meter tag values #29885
- HTTP client observations miss uri keyvalue for "/" requests #29879
- ProblemDetail is missing serialization hints for Native Image #29801
- Invalid Accept header results in IllegalStateException #29794
- AOT processing fails with Set if type doesn't implement Comparable #29792
- CSRF token not available to FreeMarker templates #29787
- Fail more explicitly when AOT attempts to handle a bean definition that uses an instance supplier #29556
- WebSocket stats not updated correctly when sessions cleared #29375
MockHttpServletRequest#setContentType
fails withStringIndexOutOfBoundsException
#29255InMemoryWebSessionStore#changeSessionId
makes blocking calls to UUID.randomUUID [#29212](#29212...