Skip to content

Releases: spring-projects/spring-framework

v5.0.15.RELEASE

02 Aug 09:06

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

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

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

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!

v5.2.0.M2

09 May 16:47

Choose a tag to compare

v5.2.0.M2 Pre-release
Pre-release

⭐ New Features

  • DefaultCacheAwareContextLoaderDelegate should log which application context instance was stored or retrieved from cache #22925
  • Replace signal materialization in TransactionAspectSupport with usingWhen #22911
  • MergedAnnotation meta-data support #22909
  • Support Publisher in MultipartBodyBuilder#asyncPart #22876
  • Consider adding is*Enabled() methods to LogAccessor #22862
  • Add getRoot() to MergedAnnotation #22818
  • Expose StompSubProtocolWebSocketHandler metrics #22807
  • Create RSocketRequesterBuilder in spring-messaging #22806
  • Return value doesn't serialize to JSON when return type is Mono of Interface in WebFlux #22803
  • Some trivial optimization in method populateBean() #22792
  • Consistently implement decodeToMono by joining buffers first #22783
  • Add decodeDataBuffer to Decoder and encodeValue to Encoder #22782
  • Add coroutines support to RSocket @MessageMapping and RSocketRequester #22780
  • Add CBOR codec (single value only) #22767
  • Add route(RequestPredicate, HandlerFunction) variant to RouterFunctions builder #22701
  • Handle Optional<?> @RequestParam() when generating URL using MvcUriComponentsBuilder #22656
  • Add reactive transaction support SPI #22646
  • Reactive transaction management support #22590
  • Support constructor injection without @Autowired when using JUnit Jupiter in spring-test #22286
  • Add protected methods to resolve the target type for payload arguments [SPR-17503] #22035
  • Consumes condition support for optional content [SPR-17478] #22010
  • Consistent error handling when streaming with servlet vs reactive stack [SPR-17440] #21972
  • Create a WebFilter for ServerWebExchange Reactor Context [SPR-17213] #21746
  • Make WebFlux multipart support fully Reactive [SPR-17122] #21659

🪲 Bug Fixes

  • @Configuration(proxyBeanMethods = false) cannot implement ImportAware #22920
  • Fix suspend/resume in AbstractReactiveTransactionManager #22918
  • Fix suspending handler method type handling #22827
  • LinkedCaseInsensitiveMap track removals via keySet, entrySet or values #22821
  • Support suspending functions returning Flow #22820
  • LinkedMultiValueMap.getFirst - check that values is not empty #22421

📔 Documentation

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium #22930

❤️ Contributors

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

v5.1.7.RELEASE

09 May 15:27

Choose a tag to compare

⭐ New Features

  • Support any HttpEntity implementing ResolvableTypeProvider #22931
  • Early out in PropertyPlaceholderHelper if no placeholder exists #22870
  • Don't throw an exception in CookieLocaleResolver, fallback to default locale instead #22861
  • Streamline ReactiveAdapterRegistry.getAdapter usage #22842
  • Consider logging classcast exceptions caused by lambdas at trace level #22834
  • Ensure flush after StreamingResponseBody #22813
  • Optimize writing with Mono Publisher #22800
  • Disable ShallowEtagHeaderFilter when ETag handled in application #22797
  • Avoid MessageFormat processing for default @Pattern validation message #22761
  • Avoid SourceClass creation for annotations that are always ignored #22750
  • Avoid expensive assertions in HttpRange #22742
  • Avoid exceptions in ReflectionUtils.isObjectMethod(…) #22730
  • Jackson2Tokenizer ignores USE_BIG_DECIMAL_FOR_FLOATS deserialization feature #22510
  • StringHttpMessageConverter will add all the default charsets even if Accept-Charset is set explicitly #22506
  • Fix CompletableFuture exception handling #22476

🪲 Bug Fixes

  • Fix EncoderHttpMessageWriter.isStreamingMediaType() #22936
  • Consistent handling of empty List entries in LinkedMultiValueMap #22912
  • Check if null before accessing exception message in webflux InvocableHandlerMethod#logArgumentErrorIfNecessary #22900
  • DefaultListableBeanFactory.destroySingleton(s) not thread-safe for manual singletons #22896
  • MockHttpServletRequest raises IndexOutOfBoundsException when Accept-Language is not set #22877
  • Avoid unguarded String concatenation for debug/trace logging #22874
  • [Regression] 404 without ACCEPT request header results in a 406 in Spring Framework 5.1.6 #22853
  • ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException when %ED%B6 is in the URL path #22851
  • MockCookie.parse(String) mishandles case sensitivity #22786
  • WebClient fails to send POST body when ObjectMapper FLUSH_AFTER_WRITE_VALUE is false #22771
  • More leaks related to Mono.just(dataBuffer) or Flux.just(dataBuffer) #22754
  • Jackson2ObjectMapperBuilder prevents the registration of multiple modules with a null typeId #22740
  • ProtobufEncoder and ProtobufDecoder buffer leaks #22731
  • o.s.h.server.reactive.ChannelSendOperator may leak the memory on cancel/error #22720
  • EL1072E when evaluating compiled comparison expression #22358
  • Got 404 with non-ASCII coded static resources in webflux #22272

📔 Documentation

  • NullPointerException in Base64Utils.encodeToString #22812
  • Remove the PROPAGATION_ prefix in the documentation of enum Propagation #22809
  • Inconsistent behavior when autowiring multiple beans by type as collection without matching beans #22735
  • Acknowledge that HttpHeaders are case-insensitive #22723

❤️ Contributors

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

v5.0.14.RELEASE

09 May 11:31

Choose a tag to compare

⭐ New Features

  • Avoid expensive assertions in HttpRange #22746

🪲 Bug Fixes

  • Consistent handling of empty List entries in LinkedMultiValueMap #22913
  • EL1072E when evaluating compiled comparison expression #22879
  • ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException when %ED%B6 is in the URL path #22863
  • Jackson2ObjectMapperBuilder prevents the registration of multiple modules with a null typeId #22763

v4.3.24.RELEASE

09 May 09:33

Choose a tag to compare

⭐ New Features

  • Avoid expensive assertions in HttpRange #22746

🪲 Bug Fixes

  • Consistent handling of empty List entries in LinkedMultiValueMap #22913
  • EL1072E when evaluating compiled comparison expression #22879
  • ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException when %ED%B6 is in the URL path #22863
  • Jackson2ObjectMapperBuilder prevents the registration of multiple modules with a null typeId #22763

v5.2.0.M1

10 Apr 09:49

Choose a tag to compare

v5.2.0.M1 Pre-release
Pre-release

⭐ New Features

  • @DestinationVariable not working with RSocket support #22776
  • Consistent non-exposure of inherited annotations in AnnotationMetadata #22766
  • Introduce publishEvent() convenience method in TestContext #22765
  • Add support to query if ApplicationContext is available in the TestContext framework #22756
  • Use more efficient Reactor operators #22727
  • Spring logging support enhancement #22726
  • Primary resolution against FactoryBean instances #22711
  • Expose Jaxb2Marshaller createMarshaller() and createUnmarshaller() methods #22708
  • WebClient option with both URI template and UriBuilder #22705
  • Track when isLazyInit has been set in AbstractBeanDefinition #22694
  • Infer null-safety from type variables in Kotlin extensions when possible #22687
  • RequestCondition optimizations #22644
  • Custom WebFlux encoders/decoders are placed below defaults #22612
  • JtaTransactionManager created with the JtaTransactionManagerFactoryBean is not ready to use #22605
  • Avoid calling other bean methods in web config #22596
  • Allow usage of BeanNameGenerator in ImportBeanDefinitionRegistrars #22591
  • Add public getDeclaredMethods method to ReflectionUtils #22580
  • Cache BridgeMethodResolver results #22579
  • Optimize StringUtils.cleanPath #22568
  • Use less memory and try to skip more classes when processing @configuration classes #22563
  • Enhance support for java.time types in spring-web #22546
  • Migrate CacheControl to use java.time.Duration for durations #22545
  • @RequestMapping without any attributes behaves as "default endpoint" #22543
  • BeanFactory.get*ForAnnotation should take @bean metadata into account #22541
  • Revisit BeanUtils.instantiateClass to work consistently with Kotlin and Java classes #22531
  • Use String::isEmpty instead of "".equals(arg) when arg is not null #22502
  • CorsUtils#isCorsRequest should detect same origin requests with an Origin header #22496
  • "java.lang.IllegalStateException: Only one connection receive subscriber allowed." is masking real exceptions in WebFlux. #22486
  • Exclude jdk package in ShadowingClassLoader #22485
  • Provide support for publishing test execution life-cycle events #22477
  • Clarify configuration lite support and offer an opt-in option #22461
  • CorsInterceptor should add to the first interceptor in InterceptorChain? #22459
  • SpringFactoriesLoader.instantiateFactory(…) should report offending class on error #22453
  • Minimise need to iterate over a class's methods #22420
  • Some very simple improvements regarding usage of ArrayList #22418
  • Extract duplicated code into a separate method #22404
  • Simplify ConcurrentReferenceHashMap #22387
  • MappingJackson2MessageConverter doesn't check if payload assignable to target type #22386
  • WebClient filters should be deferred to the subscription time #22375
  • Added configurable maxFramePayloadLength to ReactorNettyWebSocketClient #22367
  • Avoid MimeType garbage creation #22340
  • Use AtomicInteger instead of unsafe increment on volatile fields #22278
  • DefaultCorsProcessor does not set "vary: Origin" if the request has no Cors header #22273
  • Pass filename hint to the ResourceDecoder #22267
  • Use Method in CglibAopProxy.fixedInterceptorMap instead of String returned from Method::toString #22258
  • Add option for AbstractRequestLoggingFilter to blacklist certain headers #22244
  • Limit ref() and provider() visibility in Kotlin DSL [SPR-17648] #22177
  • Improve message for HttpStatusCodeException with empty status text #22162
  • Add a getAttribute method to the org.springframework.ui.Model interface [SPR-17613] #22145
  • Integrate Reactor debugging features in WebFlux [SPR-17573] #22105
  • Add bean definition attribute for ConfigurationClassPostProcessor to skip "lite" bean detection [SPR-17412] #21945
  • MapMethodArgumentResolver precludes custom argument resolvers with Map and custom annotation [SPR-17340] #21874
  • Correctly parse property name in path "map[key[foo]]" #21855
  • Bean registration with Kotlin DSL using callable reference with autowired parameters [SPR-17312] #21845
  • MockRestServiceServer.verify() not working in a CompletableFuture [SPR-17266] #21799
  • Create replacement API for handling merged annotations [SPR-17161] #21697
  • Use parameters declared in consumes or produces condition to narrow the request mapping [SPR-17133] #21670
  • Introduce Servlet version HandlerFunction and RouterFunction [SPR-16952] #21490
  • RSocket client and server support [SPR-16751] #21292
  • Incorrect return type of Kotlin suspending functions [SPR-16515] #21058
  • Let Spring show the URL mappings for @MessageMapping in startup process [SPR-16015] #20564
  • Allow transaction control via Vavr Try type [SPR-15806] #20361
  • Add support for Kotlin coroutines [SPR-15413] #19975
  • Publish test execution events to the test ApplicationContext [SPR-13916] #18490
  • toString for AbstractSqlParameterSource #2080
  • Open parameter autowiring utility for external use #2060
  • Add Kotlin DSL for working with MockMvc #1951

🪲 Bug fixes

  • AnnotatedElementUtils.getMergedAnnotation does not merge deep value attributes correctly #22703
  • AnnotationUtils.findAnnotation(Method method) broken for repeatable anns #22702
  • ConcurrentModificationException when serving Servlet.fn request and Undertow [#22698](https:...
Read more

v5.1.6.RELEASE

31 Mar 13:19

Choose a tag to compare

⭐ New Features

  • Improve exception handling when Hibernate-related bean creation fails #22689
  • STOMP servers MUST handle a STOMP frame in the same manner as a CONNECT frame #22652
  • Performance improvement in RequestMappingInfo #22598
  • Skip more classes when processing beans in EventListenerMethodProcessor #22564
  • Jackson2Tokenizer ignores USE_BIG_DECIMAL_FOR_FLOATS deserialization feature #22510
  • Revisit XML schema handling for consistent local vs external resolution #22504
  • JdbcTemplate.extractOutputParameters should preserve order of parameters #22491
  • Lazy Session initialisation for JmsTransactionManager #22468
  • MappingJackson2MessageConverter with Jackson Smile #22444
  • Cannot define custom XmlFactory with Jackson2ObjectMapperBuilder.xml() #22428
  • Directly registered FactoryBeans are instantiated more aggressively than those defined via @Bean methods #22409
  • Provide additional debug information for memory leaks via ByteBuf.touch [SPR-17427] #21960
  • Suppress Reactor Netty "disconnected client" exceptions the logs [SPR-17257] #21790

🪲 Bug Fixes

  • JdbcOperationsExtensions.queryForObject overload which takes in lambda - allow null value to be returned? #22682
  • Avoid duplicate registration of @ControllerAdvice implementing both RequestBodyAdvice and ResponseBodyAdvice #22638
  • Locale inconsistently resolves to null for invalid input value #22603
  • Jackson2ObjectMapperBuilder's modulesToInstall function does not eventually override the default configuration #22576
  • ServletWebRequest.getHeaderValues throwing NPE when header information is not available #22547
  • Fix repeat DataBuffer#write(CharSequence, Charset) calls #22484
  • Last-Modified Date format changed with SPR-17571 to not have double digit day #22478
  • @RequestMapping content negotiation should not impact error responses formats #22452
  • AbstractTraceInterceptor causes problems when implemented in Kotlin #22435
  • Events extending from PayloadApplicationEvent and implementing an interface fail to match @EventListener argument #22426
  • ReflectUtils.defineClass() ignores the ClassLoader argument in Java 11 #22416
  • DefaultConversionService fails to properly convert an Object[] to a int[] #22410
  • Ensure indexer gracefully handle missing meta annotations #22385

📔 Documentation

  • Update documentation for WebJar support #22613
  • remove broken link "overview.html#background-ioc" in doc core.html #22597
  • PDF Documentation Spring-Core 5.1.5: Occurrences of a STRONG tag, where we should see a bold font #22577
  • Using MockMvc to test Flux endpoints? #22544
  • Documentation about aspectj and agent configuration is outdated and confusing #22429
  • Add guidelines about using checked exception with proxies in Kotlin #22412

🔨 Dependency Upgrades

  • Upgrade to reactor-netty 0.8.6 for Webflux #22693

❤️ Contributors

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