Skip to content

Releases: spring-projects/spring-framework

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!

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