Skip to content

Releases: spring-projects/spring-framework

v5.2.7.RELEASE

09 Jun 07:48
Compare
Choose a tag to compare

⭐ New Features

  • Implement reliable invocation order for advice within an @Aspect #25186
  • Performance enhancement in execution of ResponseEntity.of() #25183
  • Support for shared GroovyClassLoader in GroovyScriptFactory #25177
  • Suggest making a Set.size() > 0 judgement for AbstractApplicationContext.earlyApplicationEvents #25161
  • Make use of custom types configurable in YamlProcessor #25152
  • Avoid need for default constructor in ContextAnnotationAutowireCandidateResolver subclasses #25131
  • ConstructorResolver.resolveConstructorArguments() return value issue #25130
  • Introduce serializeToByteArray/deserializeFromByteArray convenience methods #25117
  • Custom HTTP Method on MockServerHttpRequest #25109
  • Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25088
  • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25081
  • Simplify use of HttpContext in HttpComponentsClientHttpRequestFactory in support of user associated connections #25066
  • ResolvableType forClass fails when a type in the generic signature isn't present #25064
  • Include timeout unit in shutdown failure logging #25058
  • Drop unnecessary intermediate StringBuilder.toString() call in ServerSentEventHttpMessageReader #25024
  • Fix concurrency issues in XStreamMarshaller #25017
  • Introduce mechanism to discover whether a reactive type registered in ReactiveAdapterRegistry uses deferred computation #24995
  • Avoid logging exception for closed session in AbstractSockJsSession #24986
  • Include response body in RestTemplate exception when there is no suitable HttpMessageConverter #24964

🪲 Bug Fixes

  • ExchangeStrategies custom codec's reader & writer are not registered #25149
  • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25140
  • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25132
  • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25110
  • DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25106
  • Fix race condition in WriteResultPublisher between subscription and error in publishError #25096
  • Jackson message converters and codecs do not respect character encoding in canRead/canWrite #25076
  • DefaultClientResponseBuilder empty logPrefix when creating a DefaultClientResponse based on another #25069
  • HttpHeaders equals may return false without comparing actual content #25034
  • Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #24989

📔 Documentation

  • Javadoc for hibernate5 OpenSessionInViewFilter mentions FlushMode.NEVER #25158
  • Document that the Map backing a MapPropertySource should not contain null values #25142
  • Javadoc for JdbcOperations.batchUpdate should mention that negative values are possible #25138
  • Fix URI pattern example in webflux.adoc #25137
  • Document how reactive transactions work for cancellation in 5.2 and how it will work in 5.3 #25091
  • Document whether code can rely on specific subclasses of HttpClientErrorException/HttpServerErrorException being thrown from DefaultResponseErrorHandler #25067
  • Fix SpelEvaluationException with example code #25045
  • javadoc: remove a comment documented a limitation on @Lookup annotation #25044
  • Document all predefined variables from ApplicationContext available in SpEL expressions #25037
  • Document ReactiveTransactionManager support in reference manual #25036
  • Document ReactiveTransactionManager support #25030
  • Change to placeholder value in XML is not reevaluated at runtime #25022
  • Add missing @PathVariable declarations in examples in webmvc.adoc #25006

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR8 #25210

❤️ Contributors

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

v5.1.16.RELEASE

09 Jun 09:07
Compare
Choose a tag to compare

⭐ New Features

  • Performance enhancement in execution of ResponseEntity.of() #25197
  • Support for shared GroovyClassLoader in GroovyScriptFactory #25181
  • Make use of custom types configurable in YamlProcessor #25154
  • Missing null checks in AbstractMessageChannel.addInterceptor #25089
  • Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25083
  • Fix concurrency issues in XStreamMarshaller #25026
  • Avoid logging exception for closed session in AbstractSockJsSession #25003

🪲 Bug Fixes

  • AbstractJackson2HttpMessageConverter does not respect character encoding in canRead/canWrite #25185
  • ExchangeStrategies custom codec's reader & writer are not registered #25150
  • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25141
  • WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25135
  • Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25118
  • DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25107
  • Fix race condition in WriteResultPublisher between subscription and error in publishError #25102
  • HttpHeaders equals may return false without comparing actual content #25035
  • Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #25004

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR19 #25211

v5.2.6.RELEASE

28 Apr 08:55
Compare
Choose a tag to compare

⭐ New Features

  • Cache meta-annotations for stereotype check in AnnotationBeanNameGenerator #24980
  • Use WebsocketServerSpec in ReactorNettyRequestUpgradeStrategy #24959
  • Warn about unsupported "/path/**/other" patterns with WebFlux PathPatternParser #24958
  • Allow override of data binding in ModelAttributeMethodArgumentResolver #24947
  • Rid pointless wrapping with BufferedInputStream from class reading #24946
  • ResponseStatusExceptionResolver ignores ResponseStatusException headers #24944
  • Caching of autowire candidate metadata for lazy beans #24904
  • Put a limit on the size of DefaultSingletonBeanRegistry#suppressedExceptions #24902
  • Prevent setting parent bean factory to self #24900
  • Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24871
  • Improve performance of StringUtils.deleteAny() #24870
  • 'args' argument of 'JdbcTemplate#query(String, Object[], RowCallbackHandler)' method should be marked @Nullable #24839
  • Improve usage of ByteArrayOutputStream/ByteArrayInputStream #24805
  • Simplify conversion of ByteArrayOutputStream to String #24785
  • Optimize sortPostProcessors() in PostProcessorRegistrationDelegate #24776
  • Reduce byte array allocations in StompEncoder #24694

🪲 Bug Fixes

  • ConflictingBeanDefinitionException on repeated index evaluation #24978
  • Reintroduce synthesized annotation attribute value caching #24970
  • MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24916
  • Memory leak in MimeTypeUtils LRUCache #24886
  • Annotation searches potentially synthesize annotations unnecessarily #24861
  • Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24853
  • DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24852
  • Cannot dispatch without an AsyncContext when an expected error is thrown #24835
  • Duplicate Vary headers after enabling CORS filter #24829
  • Make it possible to run Spring MVC without kotlin-reflect #24828
  • Recursively copy directory with symbolic link #24823
  • Connection leak with WebClient retrieve().toBodilessEntity() #24788
  • Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24782
  • Fix empty domain handling in ResponseCookie #24758
  • Illegal reflective access warning for interface-based lookup method injection #24657
  • Annotation retrieval performance degradation after 5.2 #23905

📔 Documentation

  • HttpHeaders#getETagValuesAsList(String) does not document IAE #24950
  • Describe that bean disposal is unsupported for the beans created by FactoryBean #24948
  • Deprecate AnnotationFilter.NONE (since MergedAnnotations always filters java.lang.* annotations) #24932
  • Improve Javadoc #24908
  • Fix Javadoc in PathPattern #24841
  • Document default constructor as fallback for multiple non-@Autowired constructors #24838
  • Document precedence for @DynamicPropertySource #24837
  • Documentation: AbstractBeanDefinition.getBeanClass() vs BeanFactory.getType #24816
  • Fix typos and improve readability in Webflux documentation #24781
  • Document role of views within Spring application #24777
  • Clarify how to avoid favoring path extensions as well as deprecation warnings #24642

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.0 RC7 #24934
  • Upgrade to Reactor Dysprosium-SR7 #24892

❤️ Contributors

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

v5.1.15.RELEASE

28 Apr 08:17
Compare
Choose a tag to compare

⭐ New Features

  • Caching of autowire candidate metadata for lazy beans #24973
  • Put a limit on the size of DefaultSingletonBeanRegistry#suppressedExceptions #24972
  • Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24876

🪲 Bug Fixes

  • MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24917
  • Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24858
  • DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24855
  • Recursively copy directory with symbolic link #24826
  • Illegal reflective access warning for interface-based lookup method injection #24791
  • Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24779
  • Implementing interface in abstract class does not expose parameter annotations #24754
  • Missing nullability declarations for package web.socket.server.jetty #24750
  • MediaTypeNotSupportedStatusException seems unused #24748
  • Spring generates huge callstack for async requests #24692
  • addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24639

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR18 #24893

v5.0.17.RELEASE

28 Apr 09:23
Compare
Choose a tag to compare

⭐ New Features

  • Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24877
  • Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24515

🪲 Bug Fixes

  • MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24918
  • Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24859
  • DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24856
  • Recursively copy directory with symbolic link #24827
  • Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24780
  • Missing nullability declarations for package web.socket.server.jetty #24751
  • MediaTypeNotSupportedStatusException seems unused #24749
  • addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24640
  • Cycle in LogAdapter.Log4jLog initialization within log appender #24451

📔 Documentation

  • Update advice on RestTemplate #24504

v4.3.27.RELEASE

28 Apr 10:03
Compare
Choose a tag to compare

⭐ New Features

  • Backport of ContentDisposition fixes to HttpHeaders #24580
  • Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24516

🪲 Bug Fixes

  • MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24919
  • Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24860
  • DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24857

v5.2.5.RELEASE

24 Mar 12:00
Compare
Choose a tag to compare

⭐ New Features

  • Do not cache multipart mime types in MimeTypeUtils LRU cache #24767
  • Declare proxyBeanMethods=false in JmsBootstrapConfiguration #24752
  • Usage of java 14 record throws java.lang.UnsupportedOperationException: This feature requires ASM8_EXPERIMENTAL #24722
  • Non-public Kotlin beans can't be instantiated #24712
  • Avoid ClassCastException for CoyoteInputStream in TomcatHttpHandlerAdapter #24707
  • Avoid unnecessary sorting in AbstractHandlerMethodMapping #24704
  • Improve performance of StringUtils#cleanPath #24674
  • Optimize global advisor registration in ProxyFactoryBean #24669
  • Short circuit check in SynthesizedMergedAnnotationInvocationHandler.isVisible() #24664
  • Ignore empty domain string in ResponseCookie #24663
  • Remove UTF-8 charset parameter from Content-Type in SseEmitter #24632
  • Jaxb2XmlDecoder Does Not Throw Codec Exception For Invalid XML #24622
  • TransactionInterceptor constructors should accept a generic TransactionManager #24612
  • Relax GraalVM checks in DefaultParameterNameDiscoverer #24600
  • Multipart/related support in Spring Webclient #24582
  • Consider supporting PreFlight requests and CORS in Servlet Functional Endpoints #24564
  • Support for byte-range requests in Servlet Functional endpoints #24562
  • Provide a mechanism to configure integration tests with a dynamic property source #24540
  • Improve ConcurrentLruCache performance #24469
  • Reduce Class[] garbage when creating proxies #24221
  • implements checkNotModified for ServerRequest #24173
  • AbstractSockJsSession exception when handling message with closed session #23828

🪲 Bug Fixes

  • Missing nullability declarations for package web.socket.server.jetty #24745
  • MediaTypeNotSupportedStatusException seems unused #24743
  • MessagingRSocket incorrectly tries to release entire input stream on channel interaction #24741
  • MimeTypeUtils performance degradation #24671
  • RSocket MetadataEncoder expands the routes incorrect #24656
  • Spring generates huge callstack for async requests #24652
  • CodecException (from JSON conversion) in RestController is not mapped to 400 but 500 (SB 2.2.5 & Kotlin) #24646
  • addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24638
  • ShallowETagHeaderFilter (still) overwrites ETag and Content-Length #24635
  • Invalid JSON in requests now causes 500 instead of 400 #24630
  • Invalid request results in 500 INTERNAL ERROR instead of 400 BAD REQUEST (with Lombok and Kotlin) #24610
  • Distributions no longer deployed #24605
  • UnknownHttpStatusCodeException is missing the response body #24595
  • Implementing interface in abstract class does not expose parameter annotations #24127

📔 Documentation

  • Clarify name generation responsibility for PropertySourceFactory implementations #24757
  • Improve Javadoc in @Configuration #24753
  • Improve Javadoc in AnnotatedElementUtils #24740
  • Clarify behavior for WebClient statusHandlers #24736
  • Enhance Spring Core documentation, section 1.9.2. Using @Autowired #24711
  • Do not mention credentials as enabled by default in CorsRegistry #24691
  • Improve Javadoc in AutoProxyRegistrar #24688
  • Improve javadoc in RollbackRuleAttribute regarding nested classes #24682
  • Fix typo in testing.adoc #24627
  • Polish ReactorResourceFactory #24620
  • Fix typo in reference manual #24597
  • Add more lambda expressions in data-access code examples #24398

🔨 Dependency Upgrades

  • Upgrade to JUnit 5.6.1 #24762
  • Upgrade to Reactor Dysprosium SR6 #24725
  • Upgrade to Groovy 2.5.10 (for JDK 14 compatibility) #24719

❤️ Contributors

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

v5.2.4.RELEASE

25 Feb 17:15
Compare
Choose a tag to compare

⭐ New Features

  • BlockHoundIntegration for spring-core #24581
  • Configure quiet period for shutting down Netty resources #24538
  • Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24509
  • Raise log level for exceptions from EntityManager close call #24501
  • ExecutorConfigurationSupport to allow millisecond precision for await termination period #24496
  • Improve assertion message in PersistenceExceptionTranslationInterceptor #24484
  • BigDecimal in multi-value request body deserializes differently than single-value #24479
  • If controller method has produces="/" in 5.2.3 response is 500 instead of 406 #24466
  • SseEmitter cannot format text/plain if StringHttpMessageConverter is not configured #24465
  • Support command line arguments with an empty value #24464
  • AbstractJackson2HttpMessageConverter + Jackson 2.10: handle ValueInstantiationException properly #24455
  • Compatibility with JDK 14 #24453
  • Avoid opaque to hierarchical reset in UriComponentsBuilder when input is null #24444
  • Add Informix to supported database products for procedure calls #24443
  • Solve ReflectPermission issue in sandbox security policy model for repackaged CGLIB ReflectUtils #24420
  • Allow non-standard HttpStatus in reactive ServerHttpResponse #24400
  • Allow customizing default Smile codec via CodecConfigurer #24382
  • Simplify getCache() method in CaffeineCacheManager #24376
  • Expose property for handling of Ping frames with Reactor Netty WebSocket client and server #24367
  • Simplify getParsedSql() method in NamedParameterJdbcTemplate #24358
  • Provide control over formatting of request in HttpWebHandlerAdapter #24352
  • Add hook-point to exclude imported configuration classes #24175
  • Jackson2Decoder fails to determine correct target type from default interface method with a generic type #23791
  • Extra empty line a["\n"] messages from ActiveMQ STOMP broker #23713
  • Add a way to combine more than one AnnotationIntrospector in Jackson2ObjectMapperBuilder instead of overriding it #22830
  • Add unique number to WebFlux log prefix for Reactor Netty server #22039

🪲 Bug Fixes

  • NullPointerException in MockHttpServletRequestBuilder for URI string with no protocol #24556
  • BeanPostProcessorChecker warning due to missing infrastructure role on ProxyTransactionManagementConfiguration #24508
  • spring-aspects has a compile dependency on spring-orm #24491
  • AbstractJackson2Decoder is not aware of jackson's non-blocking parser only supporting UTF-8 #24489
  • MockRestServiceServer reset does not clear failedRequests #24486
  • Prevent unnecessary refresh for InjectionMetadata.EMPTY #24485
  • "Status and headers already sent" ISE exception from Reactor Netty on WebSocket upgrade #24475
  • The new Encoder.encodeValue and Decoder.decode methods in spring 5.2 do not provide access to the Context #24441
  • Cycle in LogAdapter.Log4jLog initialization within log appender #24440
  • Negative byte values not properly converted to unsigned int in URI encoding #24413
  • ServerSentEventHttpMessageReader maps null when event has comment only. #24389
  • Nested annotations no longer supported in ASM-based annotation processing #24375
  • Explicit Content-Type Header in WebClient is overwritten by ResourceHttpMessageWriter #24366
  • Avoid setting special Content-* response headers in TomcatHeadersAdapter #24361
  • IncompatibleClassChangeError encountered on execution of compiled SPEL expressions #24357
  • JSON decoding error parsing stream encoded with Jackson Smile #24198

📔 Documentation

  • Improve documentation for @Autowired/@Value in @Configuration classes #24585
  • Fix formatting in webflux-webclient.adoc #24578
  • Clarify AbstractResourceBasedMessageSource.setCacheMillis vs java.util.ResourceBundle #24563
  • Correct Ant-style Patterns example in documentation #24552
  • Fix javadoc in DependencyDescriptor #24551
  • Correct formatting of MessageSource example in documentation #24531
  • Update advice on RestTemplate #24503
  • Upgrade to Spring Asciidoctor Extensions 0.4.0.RELEASE #24481
  • Fix typo in StringUtils class #24471
  • Polish documentation format #24460
  • Fix Asciidoctor Warnings #24427
  • Reconsider recommended connection pools #24405
  • Improve default experience of data binding from HTML date and time input fields #24370
  • Document supported characters for identifiers in SpEL expressions #24359
  • Document that @Validated results in the use of a proxy and warn users about the side-effects #24338
  • Deprecate use of path extensions in request mapping and content negotiation #24179

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.0.0-RC6 #24482
  • Upgrade to ASM 7.3 #24438
  • Upgrade to Reactor Dysprosium SR5 #24355
  • Upgrade to JUnit Jupiter 5.6 #24299

❤️ Contributors

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

v5.1.14.RELEASE

25 Feb 16:51
Compare
Choose a tag to compare

⭐ New Features

  • Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24514
  • Raise log level for exceptions from EntityManager close call #24513
  • BigDecimal in multi-value request body deserializes differently than single-value #24487
  • Add Informix to supported database products for procedure calls #24449
  • Solve ReflectPermission issue in sandbox security policy model for repackaged CGLIB ReflectUtils #24448

🪲 Bug Fixes

  • AbstractJackson2Decoder is not aware of jackson's non-blocking parser only supporting UTF-8 #24542
  • Cycle in LogAdapter.Log4jLog initialization within log appender #24450
  • JSON decoding error parsing stream encoded with Jackson Smile #24412
  • Avoid setting special Content-* response headers in TomcatHeadersAdapter #24387
  • IncompatibleClassChangeError encountered on execution of compiled SPEL expressions #24362

📔 Documentation

  • Clarify AbstractResourceBasedMessageSource.setCacheMillis vs java.util.ResourceBundle #24584
  • Update advice on RestTemplate #24505
  • Polish documentation format #24462

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium SR16 #24527

v5.2.3.RELEASE

14 Jan 10:10
Compare
Choose a tag to compare

⭐ New Features

  • Update throwable to SQLException #24337
  • Update CORS support #24327
  • Improve exception message in AopContext.currentProxy() #24321
  • Trim line in LineInfo only once #24310
  • Merge getCallableInterceptors and getDeferredResultInterceptors #24305
  • Optimize SimpleAliasRegistry hasAlias implementation #24295
  • Improve ExposeInvocationInterceptor exception message #24293
  • Add ContentLength support for InputStreamResource created in ResourceHttpMessageConverter and ResourceDecoder #24292
  • StringHttpMessageConverter addDefaultHeaders() should check media type for wildcard before setting it into headers #24283
  • Add fast path for ClassUtils.hasMethod #24282
  • Support headers with multiple values in ResponseStatusException #24261
  • Remove quality parameter from chosen media type in WebFlux responses #24239
  • Remove Content-* response headers before error handling in WebFlux #24238
  • Reuse InputStream for ResourceRegionHttpMessageConverter #24214
  • Un-deprecate PathResource (for java.nio.file.Path resolution in createRelative) #24211
  • Simplify AdvisedSupport.removeAdvisor() #24205
  • Add BeanPropertyRowMapper.newInstance(mappedClass, conversionService) #24195
  • Short-circuit in AbstractBeanDefinition.equals() #24185
  • Expose local address in reactive ServerHttpRequest #24174
  • Improve exception message for mixed explicit and implicit aliases with @AliasFor #24168
  • Hoist constant result of SerializableTypeWrapper.unwrap() out of loop #24167
  • Add "application/*+xml" as supported media type to XML decoders #24164
  • Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #24153
  • Let UriUtils.encode…(…) methods optimize for sources without the need to be encoded #24152
  • Add accessor for logPrefix in ClientResponse to allow tying a ClientRequest to a ClientResponse #24146
  • Support variable resolution of wildcard types #24145
  • WebTestClientExtensions.expectBody doesn't work for generic types #24142
  • Add firstElement to CollectionUtils #24135
  • Improve configuration API of ClientCodecConfigurer.CustomCodecs #24124
  • Introduce BeanNameGenerator based on fully qualified class name #24114
  • ContentDisposition cannot parse encoded filename with leading space #24112
  • Add option to encode MultiValueMap of query params #24043
  • AbstractMessageConverterMethodProcessor results in 406 with "Accept: /" when @RequestMapping produces condition determined the content type #23287
  • Allow testing with any value for Content-Type and Accept header in MockHttpServletRequestBuilder #2079

🪲 Bug Fixes

  • StringDecoder buffer leak related to maxInMemorySize limit #24339
  • Cloning a WebClient.Builder instance does not copy strategiesConfigurers #24329
  • SimpleKey contains invalid hashcode on deserialization when parameters include an enum #24320
  • ServerSentEventHttpMessageReader does not respect maxInMemorySize and is always limited to 256k messages #24312
  • Unsafe double-checked locking in SpelExpression#compileExpression #24265
  • Ensure CORS processing does not add Vary header twice on async requests #24223
  • Escape quotes in filename in ContentDisposition.Builder when charset not specified #24220
  • ClassUtils.getInterfaceMethodIfPossible overhead in cached methods for SpEL key/condition expressions #24206
  • ClientCodecConfigurer drops MultipartHttpMessageWriter.partWriters when mutated #24194
  • Regression: annotation searches no longer handle exceptions #24188
  • WebFlux may send incomplete response if the session persistence fails #24186
  • Fix RSocketRequester Coroutines extensions #24166
  • Regression: prototype @ControllerAdvice beans should not be cached #24157
  • Ensure MvcUriComponentsBuilder generates correct URL from type-level mapping without leading slash #24143
  • Annotation scanning in enclosing class hierarchy results in NoClassDefFound #24136
  • ReadCancellationException does not play well with onErrorContinue #24125
  • StringHttpMessageConverter lost a fix that assumed charset UTF-8 for "application/json" #24123
  • Regression: default values for implicit aliases no longer honored in MergedAnnotations #24110
  • Functional Bean Definition DSL for noarg functions #23395

📔 Documentation

  • Docs should warn against split URL handling across handler mappings #24304
  • [spring expression doc] symbolic logical operators #24276
  • Fix example in RSocket docs #24245
  • MappingJackson2MessageConverter: fix javadoc typo #24200
  • Fix typos in DataBufferUtils Javadocs #24160
  • TOC generated by asciidoc for core-beans.adoc is truncated #24132
  • WebFlux documentation states incorrectly that BindingResult is supported after @RequestBody #22997

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium SR3 #24349
  • Upgrade to Gradle build scan plugin 3.1.1 #24252
  • Upgrade to nohttp plugin 0.0.4.RELEASE #24251

❤️ Contributors

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

Read more