Skip to content

Releases: spring-projects/spring-framework

v5.2.0.M2

09 May 16:47
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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!

v5.0.13.RELEASE

31 Mar 08:55
Compare
Choose a tag to compare

⭐ New Features

  • Revisit XML schema handling for consistent local vs external resolution #22529
  • JdbcTemplate.extractOutputParameters should preserve order of parameters #22493
  • Avoid duplicate call to findAnnotations in DefaultListableBeanFactory.findAnnotationOnBean #22355

🪲 Bug Fixes

  • Avoid duplicate registration of @ControllerAdvice implementing both RequestBodyAdvice and ResponseBodyAdvice #22684
  • Locale inconsistently resolves to null for invalid input value #22658
  • Jackson2ObjectMapperBuilder's modulesToInstall function does not eventually override the default configuration #22625
  • Last-Modified Date format changed with SPR-17571 to not have double digit day #22611
  • ServletWebRequest.getHeaderValues throwing NPE when header information is not available #22550
  • Events extending from PayloadApplicationEvent and implementing an interface fail to match @EventListener argument #22470
  • AbstractTraceInterceptor causes problems when implemented in Kotlin #22456
  • DefaultConversionService fails to properly convert an Object[] to a int[] #22414
  • IllegalArgumentException when overriding empty 'excludeFilters' array on @ComponentScan #22407
  • RestTemplate adds duplicate accept header information [SPR-16690] #22401
  • @Transactional beans not getting proxied when being initialized during failed circular reference attempt #22377
  • ApplicationContext.refresh() causes stale listeners to be added to ApplicationEventMulticaster #22374
  • ApplicationListenerMethodAdapter does not find @Ordered annotation for dynamic proxies #22353

📔 Documentation

  • Update documentation for WebJar support #22615
  • Spring MVC documentation has incorrect WebFlux reference #22380

v4.3.23.RELEASE

31 Mar 08:19
Compare
Choose a tag to compare

⭐ New Features

  • ResourceUrlEncodingFilter versioning breaks when URL contains fragment [SPR-17535] #22552
  • Revisit XML schema handling for consistent local vs external resolution #22530
  • JdbcTemplate.extractOutputParameters should preserve order of parameters #22494
  • HandlerInterceptorAdapter should honor ordering #22434
  • Avoid duplicate call to findAnnotations in DefaultListableBeanFactory.findAnnotationOnBean #22356

🪲 Bug Fixes

  • Avoid duplicate registration of @ControllerAdvice implementing both RequestBodyAdvice and ResponseBodyAdvice #22686
  • Jackson2ObjectMapperBuilder's modulesToInstall function does not eventually override the default configuration #22624
  • Events extending from PayloadApplicationEvent and implementing an interface fail to match @EventListener argument #22471
  • DefaultConversionService fails to properly convert an Object[] to a int[] #22415
  • @Transactional beans not getting proxied when being initialized during failed circular reference attempt #22376
  • ApplicationListenerMethodAdapter does not find @Ordered annotation for dynamic proxies #22352
  • RestTemplate adds duplicate accept header information #22320

❤️ Contributors

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

v5.1.5.RELEASE

13 Feb 08:06
Compare
Choose a tag to compare

⭐ New Features

  • Fix for ScriptUtils failure when '--' occurs inside a multi-line comment on the same line as '*/' #22392
  • InjectionPoint autowiring throws exception for @resource beans autowired by name #22359
  • PathMatchingResourcePatternResolver may double-wrap jar: URLs #22346
  • mariadb-java-client 2.4.0 productName changed: breaks Spring Batch #22344
  • SpringEL should not throw IllegalAccessError for invalid assignment #22336
  • Avoid duplicate call to findAnnotations in DefaultListableBeanFactory.findAnnotationOnBean #22318
  • Load-time weaving support for WildFly 13+ #22297
  • org.springframework.web.client.HttpMessageConverterExtractor#extractData fails to detect empty body when content-length header is missing #22265
  • Deprecate JibxMarshaller #22249
  • DefaultExceptionHandler logs warning cannot be disabled [SPR-17628] #22159
  • Support for null literal in Jackson2JsonDecoder [SPR-17510] #22042

🪲 Bug Fixes

  • IllegalArgumentException when overriding empty 'excludeFilters' array on @componentscan #22405
  • @transactional beans not getting proxied when being initialized during failed circular reference attempt #22370
  • CompositeLog does not log exceptions at ERROR level #22364
  • ApplicationContext.refresh() causes stale listeners to be added to ApplicationEventMulticaster #22325
  • ApplicationListenerMethodAdapter does not find @ordered annotation for dynamic proxies #22307
  • NPE in AbstractHandlerMethodMapping when trace logging is enabled and a handler's class loader does not provide package information #22306
  • Incomplete fix for MethodParameter.isOptional() ArrayIndexOutOfBoundsException #22303
  • Wrap DecodingException thrown by WebFlux functional endpoints #22290
  • Fix truncation of response body in AbstractMessageConverterMethodProcessor #22287
  • DataBuffer.write(CharSequence charSequence, Charset charset) fails on empty string with java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED #22262
  • Add tests for SpringBeanContainer (Hibernate ORM integration) and fix the behavior when requesting named beans #22260
  • ServerSentEventHttpMessageReader leaves a leading space on field decoding [SPR-17511] #22043

📔 Documentation

  • Enhance documentation for @PostConstruct/PreDestroy and @required #22348
  • Improve spring-context-indexer documentation #22339
  • Testing chapter of reference manual refers to old version of PetClinic #22288
  • Correct issues in Spring MVC section #22282
  • Clarify documentation about Spring MVC views rendered with Jackson versus @JSONVIEW #22280
  • Spring MVC documentation has incorrect WebFlux reference #22270
  • Use try-with-resources in Spring 5 documentations #22269
  • Document effect of @DirtiesContext when used with constructor injection [SPR-17654] #22183
  • Add note to Scope documentation on SimpleTransactionScope [SPR-17651] #22180
  • Document effect of preemptive timeouts on transactional tests [SPR-17647] #22176
  • Document synchronous use of WebClient [SPR-17644] #22173
  • Error in CORS WebFilter documentation of web-reactive #19841
  • Improve Kotlin documentation #22400

❤️ Contributors

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

5.1.4 Release

17 Jan 14:12
Compare
Choose a tag to compare

⭐ New Features

  • FormHttpMessageConverter should support non-String form values [SPR-17645] #22174
  • spring-jcl routes logging inefficiently against SLF4J with log4j-to-slf4j setup [SPR-17586] #22118
  • Allow java.time types for setting the Last-Modified header [SPR-17571] #22103
  • StringHttpMessageConverter should assume charset UTF-8 for application/json [SPR-17568] #22100
  • NettyDataBufferFactory.join should return original buffer as-is in case of a single element (for compatibility with Netty 4.1.32) [SPR-17560] #22092
  • Use Netty's optimized UTF-8 encoding if available [SPR-17558] #22090
  • Equals checks to MediaType.ALL should not be affected the presence of parameters [SPR-17550] #22082
  • Reactive HTTP header adapters don't print header values in toString [SPR-17546] #22078
  • Add ability to retrieve associated ClientRequest from WebClientResponseException [SPR-17087] #21624

🪲 Bug Fixes

  • HttpHeaders.EMPTY is not immutable [SPR-17633] #22164
  • UriComponentsBuilder.toUriString() is broken [SPR-17630] #22161
  • MethodParameter.isOptional() fails with ArrayIndexOutOfBoundsException [SPR-17629] #22160
  • MockMvcResultMatchers.forwardedUrl argument is not declared as nullable [SPR-17623] #22155
  • Cannot convert from Collection to RegularEnumSet [SPR-17619] #22151
  • TomcatHttpHandlerAdapter is not aware of Server[Request|Response]Wrapper [SPR-17611] #22143
  • ChannelSendOperator does not propagate cancel signal to the server [SPR-17609] #22141
  • @Value Optional<...> field injection fails in case of registered ConversionService [SPR-17607] #22139
  • @Profile mishandles "not" operand mixed with "&" [SPR-17606] #22138
  • SpEL, error parsing big InlineMap [SPR-17605] #22137
  • Composed RequestPredicates have invalid string representation [SPR-17594] #22126
  • Regression: IllegalStateException: Ambiguous handler methods is thrown for explicit HEAD mapping [SPR-17593] #22125
  • Exporting a lazily initialized bean (which implements SelfNaming and is annotated with ManagedResource annotation) gives IllegalStateException [SPR-17592] #22124
  • MockHttpServletRequest changes Accept-Language header values [SPR-17566] #22098
  • SpEL variable evaluation fails with NPE against ConcurrentHashMap [SPR-17565] #22097
  • WebClient logs "Only one connection receive subscriber allowed" when response status is an error [SPR-17564] #22096
  • Potential resource leak in DataSourceUtils.doGetConnection [SPR-17559] #22091
  • HibernateTransactionManager (unintentionally) bound to Hibernate 5.2 SharedSessionContractImplementor [SPR-17557] #22089
  • Spring JavaMailSenderImpl does not show proper message when recipient list is empty [SPR-17540] #22072
  • 'default-lazy-init' attribute is not processed when XSD validation is disabled [SPR-8335] #12983

📔 Documentation

  • Incorrect snippet of code in documentation [SPR-17601] #22133
  • Duplicate word in spring docs [SPR-17597] #22129
  • Typo in SpEL Evaluation Context Sample [SPR-17581] #22113
  • Error in reference documentation sentence in part 1.8.1. Customizing Beans by Using a BeanPostProcessor [SPR-17556] #22088
  • Doc: Support for validation in WebFlux.fn [SPR-17401] #21934
  • Improve docs on concurrent sending with direct use of WebSocket API [SPR-12886] #17484