Skip to content

Releases: spring-projects/spring-framework

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
  • Wiki 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!

v5.2.0.RC1

05 Aug 08:47
Compare
Choose a tag to compare
v5.2.0.RC1 Pre-release
Pre-release

⭐ New Features

  • Deprecate mutable aspects of MethodParameter #23385
  • Add status code 425 ("Too Early") to HttpStatus enum #23384
  • Search for annotations on enclosing classes with MergedAnnotations API #23378
  • RSocketRequester.Builder support for ConnectionSetupPayload #23368
  • Introduce SimpleUrlHandlerMapping constructor that accepts an order and a Map #23362
  • Introduce interface cache for proxied EntityManager and Query types #23345
  • Provide functionality similar to Spring Boot's BeanTypeRegistry #23341
  • Add attribute support for FactoryBean bean definitions #23339
  • Consider generics when predicting FactoryBean types #23338
  • Cache isFactoryBean detection #23337
  • Retain merged bean definition caches during post processing #23336
  • Add missing ResolvableType variants of getBeanNamesForType #23335
  • Add multi-prefix comment support for @SqlConfig #23331
  • Support @TestPropertySource as a repeatable annotation #23320
  • Add DataBuffer::toString(Charset) #23317
  • Improvements to RSocketStrategies #23314
  • Support for template routes with encoded separator in RSocketRequester #23310
  • Treat null path as non-matching pattern in AntPathMatcher #23297
  • Add multi-prefix comment support for SQL scripts #23289
  • Add a ScriptEngine factory to ScriptTemplateConfigurer #23258
  • Log at WARN level in case of contradicting PersistenceUnitManager setup #23257
  • ExchangeFilterFunctions.basicAuthentication(String, String) should cache the encoded credentials #23256
  • Introduce TransactionOperations.execute(Runnable) convenience method #23250
  • ExceptionHandlerExceptionResolver warns when re-throwing the exception cause #23233
  • Change @TestConstructor.autowire attribute into an enum #23224
  • Improve performance of FormContentFilter #23216
  • MimeTypeUtils.parseMimeType returns null MIME type in case of high concurrency #23211
  • Add explicit support for multipart/mixed in FormHttpMessageConverter #23209
  • AbstractMessageConverterMethodProcessor results in 406 even when ResponseEntity presets content type #23205
  • BasicAuthenticationInterceptor should cache the encoded credentials #23204
  • Introduce addSupportedMediaTypes() in FormHttpMessageConverter #23203
  • Add no-op TransactionOperations implementation #23198
  • @CacheEvict beforeInvocation with transaction does not work #23192
  • Presort beans in ControllerAdviceBean.findAnnotatedBeans() #23188
  • Consider generics on ApplicationListener @Bean methods #23178
  • ConnectionMapping annotation for handling of RSocket connection-level frames #23177
  • Support for registering handlers in RSocketRequester.Builder #23170
  • Leverage new Kotlin script templating support #23165
  • Improve RSocketRequester.ResponseSpec Kotlin extensions #23164
  • Support Ordered interface for @ControllerAdvice beans #23163
  • Support multipart/related and multipart/mixed MediaTypes in RestTemplate #23159
  • RSocket Metadata Mimetype "text/plain" and "application/json" support #23157
  • onStatus throws away default status handler #23155
  • Forbid null HttpMessageConverter in RestTemplate and HttpMessageConverterExtractor #23151
  • Support target type in MockMvcResultMatchers.jsonPath() #23141
  • UrlBasedViewResolvers should not override custom requestContextAttribute with null #23129
  • Add queryParams and replaceQueryParams with Collection to UriBuilder #23119
  • Provide functionality similar to Spring Boot's BeanTypeRegistry #23056
  • Expose default error handling from RequestHeadersSpec::retrieve for use with RequestHeadersSpec::exchange #22825
  • Use the accepted profiles on the BeanDefinitionDsl #22393
  • Consider conditional view caching #22391
  • WebClient's ResponseSpec should provide access to response headers #22368
  • Support for non-blocking event listener methods [SPR-17298] #21831
  • Merge class-level and method-level @Sql declarations #1835

🪲 Bug Fixes

  • @TransactionalEventListener should not receive an event if no transaction is active #23276
  • MockMvc no longer handles UTF-8 characters #23219
  • NullPointerException when FormContentFilter handles a request with no content type #23215
  • RSocketRequester.ResponseSpec Kotlin extensions issue #23185
  • PathPattern::extractPathWithinPattern does not use custom separator #23168
  • PathPatternRouteMatcher should parse routes with custom separator #23167
  • DefaultMultipartMessageReader.FilePartPart.content not available under Reactor Netty #23131
  • DefaultMultipartMessageReader.FilePart.transferTo fails occasionally #23130

📔 Documentation

  • Fix grammar in package-info.java #23401
  • Add since tag for ClientResponse.Builder.request() #23364
  • Fix typo in data-access.adoc #23247
  • Fix typo in CONTRIBUTING.md #23180
  • Document supported @Transactional attributes in the TestContext framework #23149
  • Document WebFlux FreeMarker macro support in Reference Manual #23133
  • Add since for JettyClientHttpConnector change #23128
  • Improve Kotlin integration testing documentation #22875

🔨 Dependency Upgrades

Read more

v5.1.9.RELEASE

02 Aug 09:22
Compare
Choose a tag to compare

⭐ New Features

  • WebClient's retrieve doesn't support custom HTTP status code #23367
  • Can't wrap a ClientResponse with a custom status code in a builder #23366
  • Javadoc missing on some public BeanDefinitionParserDelegate methods #23349
  • In contrast to the Javadoc, ServerHttpRequest.Builder implementation does not override headers #23333
  • Hibernate Query.list() is not included in SharedEntityManagerCreator.queryTerminatingMethods set, causing database connection not to be unreleased when query is proxied #23248
  • Exception while WebClient onStatus handler is applied leads to ByteBuf leak #23230
  • Error signal not propagated if writeFunction in ChannelSendOperator fails immediately #23175
  • PathPatternParser does not allow any non-Java characters in variables like "-" #23101

🪲 Bug Fixes

  • MethodParameter.equals is too coarse-grained for its use in HandlerMethodArgumentResolverComposite #23352
  • Session.close() accidentally triggers creation of TransactionAwareDataSourceProxy Connection #23346
  • Inconsistent use of getInterfaceMethodIfPossible for init method invocation #23323
  • ResolvableType.forRawClass fails isAssignable against TypeVariable #23321
  • ForwardedHeaderTransformer preserves escape sequences when applying X-Forwarded-Prefix #23305
  • Accept header with trailing comma produces HTTP "406 Not Acceptable" #23241
  • FlashMapManager throws StringIndexOutOfBoundsException for empty target URL path #23240
  • SpEL ReflectivePropertyAccessor: ConversionService missing annotations on concrete implementations #23210
  • Defensively register ReactiveReturnValueHandler for messaging methods #23207
  • Raise log level when bean destruction fails #23200
  • New OncePerRequestFilter behavior breaks RequestContextFilter on Jetty after sendError #23196
  • SpringValidatorAdapter's ObjectError subclass is not Serializable #23181
  • WebSocketHttpRequestHandler not writing headers after interceptor returns false #23179
  • Reliable detection of user change from interceptor in StompSubProtocolHandler #23160
  • Fixes issue with optional @RequestPart Mono argument being resolved to null instead of Mono.empty #23070

📔 Documentation

  • Add Javadoc since for Jaxb2XmlDecoder(MimeType...) #23353
  • Fix typo in webflux.adoc #23329
  • Clarify use of MultipartBodyBuilder with RestTemplate #23295
  • Improve documentation for @Autowired constructors #23263
  • AbstractCacheManager.getCache() breaks contract of CacheManager.getCache() #23193
  • PriorityOrdered Javadoc is misleading #23187
  • Document that Ordered is not supported for @ControllerAdvice beans #23172
  • Fix Jackson documentation broken links #23153
  • Document how to specify Jackson JSON view serialization hints #23150
  • HtmlUtils Javadoc refers to deprecated Apache Commons Lang #23122
  • Docs for Spring MVC Test should cover async requests [SPR-15099] #19666

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.0.15.RELEASE

02 Aug 09:06
Compare
Choose a tag to compare

⭐ New Features

  • Javadoc missing on some public BeanDefinitionParserDelegate methods #23398
  • Thread-safe removal of destruction callbacks in web scopes #23118
  • Guard against ConcurrentModificationExceptions in the systemProperties PropertySource #23112
  • Avoid expensive assertions in web resource resolution #22964

🪲 Bug Fixes

  • Session.close() accidentally triggers creation of TransactionAwareDataSourceProxy Connection #23396
  • MethodParameter.equals is too coarse-grained for its use in HandlerMethodArgumentResolverComposite #23386
  • ResolvableType.forRawClass fails isAssignable against TypeVariable #23322
  • FlashMapManager throws StringIndexOutOfBoundsException for empty target URL path #23245
  • MappingMediaTypeFileExtensionResolver ConcurrentModificationException #23113
  • Fix MockHttpServletRequest.setCookies to produce single Cookie header #23085
  • Fix ScriptUtils for MS Windows line ending #23027

📔 Documentation

  • Improve documentation for @Autowired constructors #23309
  • Document that Ordered is not supported for @ControllerAdvice beans #23173
  • Reintroduce author list and copyright notice #23080
  • spring-mvc.xsd stale-if-error attribute documentation incorrect #23000
  • AbstractBeanDefinition.getBeanClass() javadoc misleads about returning null #22966

v4.3.25.RELEASE

02 Aug 08:33
Compare
Choose a tag to compare

⭐ New Features

  • Javadoc missing on some public BeanDefinitionParserDelegate methods #23399
  • Avoid expensive assertions in web resource resolution #22965

🪲 Bug Fixes

  • Session.close() accidentally triggers creation of TransactionAwareDataSourceProxy Connection #23397
  • MethodParameter.equals is too coarse-grained for its use in HandlerMethodArgumentResolverComposite #23387
  • FlashMapManager throws StringIndexOutOfBoundsException for empty target URL path #23246
  • Fix ScriptUtils for MS Windows line ending #23026

📔 Documentation

  • Improve documentation for @Autowired constructors #23308
  • Document that Ordered is not supported for @ControllerAdvice beans #23174
  • spring-mvc.xsd stale-if-error attribute documentation incorrect #23001
  • AbstractBeanDefinition.getBeanClass() javadoc misleads about returning null #22967

v5.2.0.M3

13 Jun 13:26
Compare
Choose a tag to compare
v5.2.0.M3 Pre-release
Pre-release

⭐ New Features

  • Log exception when closing InputStream in AbstractResource #23116
  • Add MultiValueMap.addIfAbsent method #23111
  • Allow Printers and Parsers to be registered individually to FormatterRegistry #23110
  • Improve FreeMarker macro support in spring-webflux #23105
  • Annotate Object#equals parameter with @Nullable #23093
  • Allow separator configuration in PathPatternParser #23092
  • Side effect from ProducesRequestCondition cache with multiple RequestMappingHandlerMapping beans #23091
  • Refine Coroutines adapter registration activation #23087
  • Rename TransactionSynchronizationManager#currentTransaction to something more meaningful #23086
  • Support filename input in MultipartBodyBuilder #23083
  • Support consistent ordering of string adapting properties #23081
  • Add constants for application/cbor to MediaType #23042
  • Avoid unnecessary call to get message type #23040
  • Support for fine-grained by-type references in the bean definition model #23032
  • RestTemplateXhrTransport fails for a StreamingHttpOutputMessage type request #23030
  • Provide utility for writing Properties to a file in a repeatable manner #23018
  • Expose StompSubProtocolHandler and StompBrokerRelayMessageHandler metrics #23015
  • Ensure access to configured mime types in client-side RSocket requester or responder #23012
  • Consistently support CompletionStage/CompletableFuture in ReactiveAdapterRegistry #23011
  • Add FreeMarker macro support in spring-webflux #23002
  • NamedParameterJdbcTemplate: treat Iterable parameters like Collections #22981
  • Add JettyClientHttpConnector that accepts a HttpClient instance and a JettyResourceFactory #22977
  • Add HttpHeaders.getOrEmpty(…) to avoid clients having to default to an empy list #22949
  • messageBrokerTaskScheduler incorrect type #22943
  • Support composite metadata in RSocketRequester and MessageHandlerAcceptor #22798
  • Add leading slash for path predicate if not present #22795
  • Enable use of PathPattern for RSocket routing #22642
  • Ensure indexer output is deterministic and repeatable #22383

🪲 Bug Fixes

  • Soft reference-based cache causes confusing exception message from AnnotationTypeMapping resolveAliasTarget #23010

📔 Documentation

  • Error in javadoc for o.s.web.servlet.function.ServerResponse #23075
  • Document @Value support in the reference manual #23052
  • Fix typo #23046

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.1.8.RELEASE

13 Jun 14:57
Compare
Choose a tag to compare

⭐ New Features

  • Thread-safe removal of destruction callbacks in web scopes #23117
  • Guard against ConcurrentModificationExceptions in the systemProperties PropertySource #23063
  • OncePerRequestFilter does not work properly on Error Dispatch on Jetty #22989
  • SimpleMessageListenerContainer - add possibility to disable manual recovery #22987
  • AntPathMatcher#isPattern ignores template variables #22959
  • Avoid expensive assertions in web resource resolution #22955
  • WebFlux: Mono does not invoke onComplete(), but instead cancel() #22952
  • Illegal reflective access on shutdown of ExecutorService #22939
  • Illegal reflective access by SpEL ReflectivePropertyAccessor #22242

🪲 Bug Fixes

  • Fix MockHttpServletRequest.setCookies to produce single Cookie header #23074
  • MappingMediaTypeFileExtensionResolver ConcurrentModificationException #23064
  • Weird behaviour when calling ApplicationContext.getBean() with a null class reference #23045
  • StompSubProtocolHandler does not close the connection after sending an ERROR frame #23039
  • WebFlux AbstractView does not allow null model values anymore #23038
  • Fix ScriptUtils for MS Windows line ending #23019
  • validation error message {0} is not working #23014
  • AnnotatedElementUtils.findMergedAnnotation not working for javax annotations (e.g. NotNull) #22957
  • WebFlux AbstractView does not update BindingResult for resolved async attributes #22933
  • HeaderResultMatchers should not import org.junit.Assert #22932

📔 Documentation

  • Reintroduce author list and copyright notice #23049
  • spring-mvc.xsd stale-if-error attribute documentation incorrect #22983
  • AbstractBeanDefinition.getBeanClass() javadoc misleads about returning null #22960
  • Fix typo in package-info.java #22941

❤️ Contributors

We'd like to thank all the contributors who worked on this release!