Skip to content

Releases: spring-projects/spring-framework

v5.1.13.RELEASE

14 Jan 09:25
Compare
Choose a tag to compare

⭐ 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

14 Jan 10:57
Compare
Choose a tag to compare

⭐ 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

  • TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #23998
  • Correct Javadoc for WebMvcConfigurer#addInterceptors #23926

v4.3.26.RELEASE

14 Jan 13:07
Compare
Choose a tag to compare

⭐ 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

03 Dec 09:26
Compare
Choose a tag to compare

⭐ 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...
Read more

v5.1.12.RELEASE

03 Dec 08:42
Compare
Choose a tag to compare

⭐ 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

02 Nov 08:44
Compare
Choose a tag to compare

⭐ 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

02 Nov 08:28
Compare
Choose a tag to compare

⭐ 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

30 Sep 10:19
Compare
Choose a tag to compare

⭐ 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

28 Sep 12:37
Compare
Choose a tag to compare

⭐ 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

05 Sep 10:54
Compare
Choose a tag to compare
v5.2.0.RC2 Pre-release
Pre-release

⭐ 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!