Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.1.13.RELEASE
⭐ New Features
- Support headers with multiple values in ResponseStatusException #24284
- Un-deprecate PathResource (for java.nio.file.Path resolution in createRelative) #24217
- Improve configuration API of ClientCodecConfigurer.CustomCodecs #24201
- Let UriUtils.encode…(…) methods optimize for sources without the need to be encoded #24154
- Support variable resolution of wildcard types #24150
- ContentDisposition cannot parse encoded filename with leading space #24148
🪲 Bug Fixes
- StringDecoder buffer leak related to maxInMemorySize limit #24346
- Cloning a WebClient.Builder instance does not copy strategiesConfigurers #24330
- Unsafe double-checked locking in SpelExpression#compileExpression #24306
- Ensure CORS processing does not add Vary header twice on async requests #24229
- Escape quotes in filename in ContentDisposition.Builder when charset not specified #24224
- ClassUtils.getInterfaceMethodIfPossible overhead in cached methods for SpEL key/condition expressions #24209
- ClientCodecConfigurer drops MultipartHttpMessageWriter.partWriters when mutated #24202
📔 Documentation
- WebFlux documentation states incorrectly that BindingResult is supported after
@RequestBody
#24181
v5.0.16.RELEASE
⭐ New Features
- Cache result of String.getBytes() in ExtendedBeanInfo.PropertyDescriptorComparator #24109
- Avoid substring allocation in StringUtils.replace #24025
- Support for new MySQL 8 error code 3572 #23974
🪲 Bug Fixes
- Unsafe double-checked locking in SpelExpression#compileExpression #24307
- Escape quotes in filename in ContentDisposition.Builder when charset not specified #24230
- SqlRowSet accessor methods should be marked
@Nullable
#24045 - Allow schemaZip Gradle task to execute on MS Windows #23988
- Bean definition override leads to NPE due to inconsistent equality check #23709
- Fix DefaultListableBeanFactory#copyConfigurationFrom #23708
- Synchronized blocks in MethodOverrides are hurting concurrency #23707
📔 Documentation
v4.3.26.RELEASE
⭐ New Features
- Avoid substring allocation in StringUtils.replace #24026
- Support for new MySQL 8 error code 3572 #23975
🪲 Bug Fixes
- Unsafe double-checked locking in SpelExpression#compileExpression #24308
- Allow schemaZip Gradle task to execute on MS Windows #23989
- AbstractRequestLoggingFilter.isIncludeHeaders() declared as protected #23814
- Bean definition override leads to NPE due to inconsistent equality check #23711
- Fix DefaultListableBeanFactory#copyConfigurationFrom #23710
📔 Documentation
- TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #24001
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.2.RELEASE
⭐ New Features
- Provide default codecs config callback to custom codecs #24118
- Add protobuf MessageConverter #24087
- Refine Throwable handling in spring-websocket #24075
- Improve part content type determination in MockMultipartHttpServletRequest #24074
- Cache result of String.getBytes() in ExtendedBeanInfo.PropertyDescriptorComparator #24072
- Use String.isEmpty() instead of String.equals("") #24052
- IOException "Closed while Pending/Unready" with WebFlux on Jetty #24050
- Avoid substring allocation in StringUtils.replace #24023
- Use
@MessageMapping
method signature to constrain RSocket interaction model #23999 - Avoid indefinite wait to connect in JettyWebSocketClient #23994
- Add queryParam method to MockHttpServletRequestBuilder #23980
- Fallback locale other than the system locale in AbstractResourceBasedMessageSource #23977
- Support for new MySQL 8 error code 3572 #23972
- Simplify ConstructorResolver: do not sort intermediate array #23969
- Avoid store all beanName in ApplicationListenerDetector #23965
- Allow ExchangeStrategies customizations in WebClient #23961
- Use Method::getParameterCount where possible #23949
- Align implementations of StringToUUIDConverter and UUIDEditor #23940
- Use "non-blocking" thread for server-less tests in WebTestClient #23936
- Avoid default Accept header from HttpUrlConnection in RestTemplate with put and delete #23740 #23855
- Reject "%2F" as an invalid sequence in simp messaging usernames #23836
- ApplicationListenerMethodAdapter: gracefully handle beans which are actually NullBean #23784
- Provide orNull extensions for WebFlux ServerRequest #23761
- MockMvc Kotlin DSL should support async dispatch #23758
- RSocketRequestSpec handling metadata values that is a Publisher type #23640
- Preserve the originalMessage when creating an ErrorMessage in MessageBuilder #23417
- Add an option to not include Charset in the final http request ContentType Header #22971
- Allow sending headers with the disconnect frame #22715
- Avoid String concatenation for lookup in StaticMessageSource #22451
- Keys for form data in FormHttpMessageConverter must not be null #22372
- XpathResultMatcher supports Hamcrest Matcher NodeList #2023
- Error details in RestTemplate client and server exceptions #1956
- Preserve "type" parameter in media type for Atom Feed/Entry message conversion #1885
🪲 Bug fixes
- Null pointer when connecting to RSocket #24088
- Regression:
@Inherited
annotations declared in superclass are not recognized anymore #24077 - RSocketRequester allows specifying data more than once #24073
- Revise AbstractBeanDefinition equals implementation #24048
- SqlRowSet accessor methods should be marked
@Nullable
#24042 - Unsafe invocation of .value() on annotations in SynthesizedMergedAnnotationInvocationHandler prevents backwards-compatible additions to annotations #24029
- InMemoryWebSessionStore makes blocking calls to UUID.randomUUID #24027
- ControllerAdviceBean.findAnnotatedBeans() finds proxies as well as their target beans, resulting in double registration #24017
- NullPointerException in JSON codec parsing stream encoded with Jackson Smile #24009
- Fix inappropriate eager init. #23992
- Calling MethodParameter.isOptional() for Kotlin Continuation parameter fails with IndexOutOfBoundsException #23991
- Regression: ControllerAdviceBean#getOrder() causes BeanCreationException for request scoped advice beans #23985
- TestDispatcherServlet ambiguous handler methods with consumes condition and body not required #23978
- AbstractRequestLoggingFilter.getHeaderPredicate is accidentally public #23976
- Reading 'null' JSON response via WebClient fails in v5.2.x #23935
- Allow schemaZip Gradle task to execute on MS Windows #23933
- Regression: AnnotationUtils.findAnnotation no longer finds non-inherited "java." annotations on superclasses #23929
- ResponseCookie to allow leading dot in domain name again #23924
- Regression in spring-test's 5.2.1 MockCookie parse implementation #23911
- useSuffixPatternMatch ignored if pathPrefix is also used #23907
- Ensure InstantFormatter can properly deserialize ISO-formatted dates #23895
- Fix RSocket Fire and forget handling with Kotlin #23866
- SpEL cannot invoke Kotlin synthetic classes #23812
- ShallowETagHeaderFilter overwrites ETag #23775
- Corrupted multipart + correct content-length lead to
Flux<Part>
hanging #23768
📔 Documentation
- [.] is displayed as [bold .] ,need to escape #24108
- Fix consecutive-word duplications in documentation #24089
- Examples in Data Access chapter declare unused JdbcTemplate fields #24085
- Data Access chapter 3.5.1 uses bad pattern #24084
- Documentation flaw for
<tx:method/>
settings #24080 - Fix errors in documentation #24008
- TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #23996
- Update docs on ShallowEtagHeaderFilter with regards to ASYNC dispatches #23958
- DEFAULT_PHASE of SmartLifecycle interface has incorrect Javadoc #23956
- Documentation for ForwardedHeaderFilter does not mention important filter order #23954
- Different behavior when injecting beans from local
@Configuration
class vs. external@Configuration
classes #23934 - Correct Javadoc for WebMvcConfigurer...
v5.1.12.RELEASE
⭐ New Features
- Provide default codecs config callback to custom codecs #24119
- Allow ExchangeStrategies customizations in WebClient #24106
- Cache result of String.getBytes() in ExtendedBeanInfo.PropertyDescriptorComparator #24095
- IOException "Closed while Pending/Unready" with WebFlux on Jetty #24060
- Avoid substring allocation in StringUtils.replace #24024
- Support for new MySQL 8 error code 3572 #23973
- WebClient retry() doesn't re-run filters #23909
🪲 Bug fixes
- NullPointerException in JSON codec parsing stream encoded with Jackson Smile #24076
- Revise AbstractBeanDefinition equals implementation #24054
- SqlRowSet accessor methods should be marked @nullable #24044
- ControllerAdviceBean.findAnnotatedBeans() finds proxies as well as their target beans, resulting in double registration #24018
- Ensure InstantFormatter can properly deserialize ISO-formatted dates #23993
- Allow schemaZip Gradle task to execute on MS Windows #23987
- Corrupted multipart + correct content-length lead to Flux hanging #23948
- ShallowETagHeaderFilter overwrites ETag #23941
- ResponseCookie to allow leading dot in domain name #23928
- Regression in spring-test's 5.2.1 MockCookie parse implementation #23920
- useSuffixPatternMatch ignored if pathPrefix is also used #23919
📔 Documentation
- TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #23997
- Different behavior when injecting beans from local @configuration class vs. external @configuration classes #23990
- DEFAULT_PHASE of SmartLifecycle interface has incorrect Javadoc #23964
- Correct Javadoc for WebMvcConfigurer#addInterceptors #23913
🔨 Dependency upgrades
- Upgrade to Reactor Californium-SR14 #24038
v5.2.1.RELEASE
⭐ New Features
- Support for limits on input stream processing in WebFlux codecs #23884
- Race condition affecting performance in AbstractJaxb2HttpMessageConverter - JAXBContext creation #23879
- Add RSocketRequester retrieveAndAwaitOrNull extension #23874
- Support unidirectional
@AliasFor
attribute mapping within an annotation #23834 - Allow setting primary flag on BeanDefinitionBuilder #23794
- Introduce sessionAttributeDoesNotExist in RequestResultMatchers #23756
- EventPublishingTestExecutionListener is not included in JUnit 4 and TestNG base classes #23748
- Optimize Connection.setReadOnly(false) in DataSourceUtils.resetConnectionAfterTransaction(…) #23747
- Handling of ResponseStatusException to also include setting of response headers #23741
- Fix OkHttp3ClientHttpRequestFactory shutdown flow #23628
🪲 Bug Fixes
- Reorder date formatting converter in registrar #23893
- Revisit
@Configuration
(proxyBeanMethods = false) with qualified injection points #23887 - Fixing NPE in AbstractNamedValueMethodArgumentResolver #23882
- WebClient onStatus order changed #23880
- TransactionalOperator::transactional does not close the transaction when cancelled #23864
- Remove unused type parameter declarations in XpathRequestMatchers #23860
- Remove unused type parameter declarations in MockMvc #23858
- Repeatable annotation container no longer found on custom composed annotation #23856
- Missing CORS headers defined in SockJS CORS configuration #23843
- Consider target transaction manager for traditional vs reactive transaction decision #23832
- InaccessibleObjectException after upgrading to Framework 5.2 #23829
- Incorrect value of the MediaType.APPLICATION_PROBLEM_JSON_UTF8 #23825
- Autowiring performance degradation due to 5.2's MethodParameter.getParameterType() implementation #23792
- Preserve expires attribute in MockCookie #23769
- Regression: attribute override configured via
@AliasFor
no longer honored in annotation hierarchy #23767 - spring 5.2 dist.zip naming issue #23745
- MockServletContext should treat InvalidPathException like an IOException #23717
📔 Documentation
- Update Spring Boot references in testing documentation #23848
- Fix typo in rsocket doc #23762
- Fixes broken links to dev.java.net #23746
- Fix typo in web-uris doc #23739
- Update documentation for importing projects into Eclipse #23706
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR1 #23871
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.1.11.RELEASE
⭐ New Features
- Race condition affecting performance in AbstractJaxb2HttpMessageConverter - JAXBContext creation #23894
- Support for limits on input stream processing in WebFlux codecs #23885
- Allow setting primary flag on BeanDefinitionBuilder #23808
- Handling of ResponseStatusException to also include setting of response headers #23800
🪲 Bug Fixes
- Reorder date formatting converter in registrar #23896
- MockServletContext should treat InvalidPathException like an IOException #23888
- Preserve expires attribute in MockCookie #23881
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR13 #23870
v5.2.0.RELEASE
⭐ New Features
- Add support for MockRestServiceServer to verify that a header does not exist #23721
- Set name for shutdown hook Thread #23670
- Use Reactor's new Schedulers.boundedElastic() #23661
- Avoid ArrayIndexOutOfBoundsException in SpEL's Indexer #23658
- Fix RSocketRequester API for requests without payload #23649
- Allow registration of RSocket metadata extractors #23645
- Allow
@Import
and@ComponentScan
classes to use constructor injection #23637 - Add SVG mapping to mime.types file for JavaMail support #23629
- Provide support for disabling cron-based scheduled jobs registered via SchedulingConfigurer #23568
- Log HTTP method in logging filters and revise log message format #23567
- Omit cancellation of transactional Monos in TransactionOperator #23562
- PathMatchingResourcePatternResolver cannot load resources with a '#' in their file name within JARs #23532
- Improve parity between Java and Kotlin router DSL #23524
- Provide an memory efficient alternative to ClientHttpRequestInterceptor #22002
🪲 Bug Fixes
- Newly added TransactionOperations.execute(Runnable) breaks existing Kotlin code #23724
- ServerRequestExtensionsTests#
remoteAddressOrNull with value()
fails on Java 13 #23677 - PathPatternParserTests#regexPathElementPatterns() fails on Java 13 #23669
- BOM has explicit
compile
scope for each dependency #23660 - AbstractResource causes early log4j initialization #23655
- Improper UTF-8 handling in MockMvc for JSON response #23622
- Memory leak when using
@Async
after upgrading from 5.1 to 5.2 #23571 - FactoryBean registered with explicit target type cannot be autowired by type #23561
📔 Documentation
- Fix typo in DispatcherServlet Javadoc #23726
- Clarify units handling in DataSize javadoc #23697
- Upgrade "Spring Framework Versions" page to mention JDK 13 support #23674
- Document WebMvc.fn #23657
- Mention Ordered and
@Order
support for components in Javadoc #23636 - Fix typo #23603
- Document minimum JDK 8 update version #23563
- RSocket documentation #23147
🔨 Dependency Upgrades
- Upgrade to RSocket 1.0.0.RC5 #23698
- Upgrade to Reactor Dysprosium-RELEASE #23695
- Upgrade to Spring Doc Resources 0.1.3 #23679
- Upgrade to Coroutines 1.3.2 #23663
- Upgrade to Jackson 2.10.0 #23662
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.1.10.RELEASE
⭐ New Features
- Backport PR #22485 (Exclude jdk package in ShadowingClassLoader) to 5.1 branch #23641
- SimpleCacheManager should not synchronize on AbstractCacheManager#cacheMap #23635
- MockClientHttpResponse loses original HttpStatus code #23599
- BeanUtils.isSimpleValueType() should not consider void or Void as a simple value type #23573
- ClassUtils.isPrimitiveOrWrapper(…) and friends should consider Void.class a primitive wrapper for void.class #23572
- Custom DefaultResourceLoader subclass should be able to consume context-provided ProtocolResolvers #23564
- sendBufferSizeLimit exceeded should be logged at warn level #23534
- Provide a method to get the original bean name from a scoped target's bean name #23514
- Raise 400 instead of 500 on failure to find index of lookupPath within requestUri in ResourceUrlEncodingFilter #23508
- IncompatibleClassChangeError on Jetty WebSocket ExtensionFactory #23500
- Respect already set
content-length
header for HEAD request. #23484 - Static resource support does not handle requests for a file with % character in its name #23463
- Errors.NativeIoException from WebClient on WebFlux server does not set the response status #23319
🪲 Bug Fixes
- SameSite cookie attribute missing when using WebFlux #23693
- Ensure ClassFilter and MethodMatcher implementations are cacheable #23659
- LinkedCaseInsensitiveMap does not track removals via keySet, entrySet, or values #23644
- Wait for complete disposal of Reactor Netty resources in ReactorResourceFactory #23631
- Spring fails to determine that XML is DTD-based if DTD declaration is followed by a comment #23605
- ClassCastException when use ServerHttpResponseDecorator to modify response of websocket #23598
- Infinite loop due to doFilterNestedErrorDispatch() method in OncePerRequestFilter #23596
- Bean definition override leads to NPE due to inconsistent equality check #23593
- Fix DefaultListableBeanFactory#copyConfigurationFrom #23569
- Response with an invalid content type hangs when using WebFlux with Jetty #23553
- Entry set of read-only HttpHeaders loses original headers' ordering #23551
- DefaultListableBeanFactory throws a NullPointerException when resetBeanDefinition() is invoked concurrently #23542
- No way to replace Set-Cookie header via MockHttpServletResponse #23512
- ConcurrentModificationException in MockHttpServletResponse #23460
- Synchronized blocks in MethodOverrides are hurting concurrency #23448
- AnnotationAttributes#assertNotException should check for instance of Throwable #23424
- Reactive JettyRequestUpgradeStrategy returns 'No WebSocketServerFactory available' on startup with simultaneous handshakes #23313
- WebFlux with Tomcat, intermittent timeout when creating response #23096
📔 Documentation
- Improve docs for AnnotatedBeanDefinitionReader,
@Configuration
, and@ContextConfiguration
regarding "annotated classes" #23638
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR12 #23694
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.0.RC2
⭐ New Features
- Invalid partial content requests possible with start byte = resource-byte-count #23576
- Support invoking static methods with ReflectionTestUtils.invokeMethod() #23504
- Detect ClientHttpConnector to use by checking classpath #23493
- Remove statusCode state from ContentCachingResponseWrapper #23490
- Fix "array index out of bounds" problem reported by LGTM.com #23485
- Explicit attribute overrides configured via
@AliasFor
not supported for components picked up via component scanning #23402 - Provide a way to predict bean types without initializing FactoryBeans #23374
- Pre-allocate NoTransactionException in TransactionContextManager #23360
- Use System.nanoTime() instead of System.currentTimeMillis() in StopWatch #23235
- Correct encoding and decoding of "message/x.rsocket.routing.v0" #23137
- Add support for Coroutines transactions #22915
🪲 Bug Fixes
- Cannot use relative path following placeholder in
@TestPropertySource
locations #23544 - Spring Webflux 5.2.0.M2 - Kotlin coroutines - ServerRequest.awaitPrincipal always null #22986
📔 Documentation
- Fix typos related to indefinite articles #23555
- Adding Kotlin code examples to Testing documentation. #23545
- Add
@since
for getCacheFilter and setCacheFilter #23519 - Uncyclo build instructions for local Maven repo are outdated #23517
- Fix unmatched parenthesis in the documentation of ContextHierarchy #23487
- Modify the javadoc of
@EnableWebFlux
annotation #23457 - Kotlin examples in Spring Core docs should use extension functions with reified types #23456
- Improve language-switch CSS #23454
- Fix data access documentation typo #23450
- Fix / in Javadoc #23439
- Reference documentation for ContextClosedEvent is misleading #23436
- Reference documentation for
@Autowired
's required attribute is misleading #23428 - Provide code samples in Kotlin in addition to Java [SPR-17245] #21778
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-RC1 #23579
- Upgrade to RSocket 1.0 RC3 #23543
- Upgrade to Kotlin 1.3.50 #23536
- Upgrade to Kotlin Coroutines 1.3.0 #23535
- Upgrade to CGLIB 3.3 #23453
❤️ Contributors
We'd like to thank all the contributors who worked on this release!