Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.2.0.M2
⭐ 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
⭐ 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
⭐ 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
⭐ 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
⭐ 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
v5.1.6.RELEASE
⭐ 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
⭐ 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
v4.3.23.RELEASE
⭐ 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
⭐ 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
⭐ 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