Skip to content

Releases: spring-projects/spring-framework

v5.1.20.RELEASE

09 Dec 07:43
Compare
Choose a tag to compare

⭐ New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26192
  • Wildcard is a valid Access-Control-Expose-Headers value #26116
  • EntityManagerFactory startup failure in deferred mode is only available on first use #26095
  • StompSubProtocolHandler logs failed authentication with error stack trace #26038
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26015
  • Inefficient request handling inside ServletRequestDataBinder #26005

🪲 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26243
  • DataBuffer Leak in Server Response #26235
  • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26106
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26084
  • NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26074
  • Order of profiles in tests is not preserved #26009

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26136

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR23 #26233

v5.0.20.RELEASE

09 Dec 08:24
Compare
Choose a tag to compare

⭐ New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26193
  • Inefficient request handling inside ServletRequestDataBinder #26006
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25903

🪲 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26244
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26085
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25962
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25873
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25870
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25868

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26137
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25871

v4.3.30.RELEASE

09 Dec 08:58
Compare
Choose a tag to compare

⭐ New Features

  • ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26194
  • Inefficient request handling inside ServletRequestDataBinder #26007
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25904

🪲 Bug Fixes

  • Remove duplicate "property" in PropertyCacheKey.toString() #26245
  • UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26086
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25869

📔 Documentation

  • DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26138

v5.3.1

10 Nov 10:13
Compare
Choose a tag to compare

⭐ New Features

  • Expose a public method "isClosed" to indicate whether the connection has been closed in WebSocketSession (WebFlux) #26043
  • WebFlux missing programmatic handling of MappingJacksonValue #26035
  • Optimize locking in AspectJProxyFactory for concurrent aspect instantiation #26034
  • Upgrade SpelCompiler bytecode level to 1.8 and optimize for concurrent access #26033
  • MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26031
  • SpEL doesn't work nicely with records #26029
  • StompSubProtocolHandler logs failed authentication with error stack trace #26026
  • Expose toEntityFlux methods in WebClient.ResponseSpec #26023
  • Improve AdvisedSupport.getAdvisors() #26017
  • Improve URI/query strings sanitization #26012
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26010
  • DefaultWebClientBuilder copies references #25992
  • Inefficient request handling inside ServletRequestDataBinder #25986
  • Avoid multiple volatile reads/writes in a row where only one is enough #25899
  • Allows Jackson2 encoders to log Throwable reason for not being able to serialize or deserialize #25892
  • Mechanism to access request bound objects in WebClient filter in servlet env #25710

🪲 Bug Fixes

  • Cannot be cast to class Publisher error with non suspending @Transactional functions #26052
  • Fix wrong reference in UrlPathHelper.removeSemicolonContentInternal() #26050
  • setTaskScheduler in StompBrokerRelayRegistration breaks chaining #26049
  • Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26025
  • Autowiring does not work reliably in case of dynamically changing prototype bean class #26019
  • Order of profiles in tests is not preserved #26004
  • @Transactional on suspending function returning a value always rollbacks #25998
  • SseEmitter: connection closed after first event #25987
  • @Nonnull annotation breaks ServletRequestMethodArgumentResolver for Principal #25981
  • Spring MVC's locale resolver can no longer be customized in parent context #25290

📔 Documentation

  • Fix kotlin example code which does not compile #26016
  • Fix a broken Asciidoctor syntax in core-resources.adoc #25999

❤️ Contributors

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

v5.2.11.RELEASE

10 Nov 08:01
Compare
Choose a tag to compare

⭐ New Features

  • StompSubProtocolHandler logs failed authentication with error stack trace #26037
  • MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26036
  • DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26013
  • DefaultWebClientBuilder copies references #25993
  • Inefficient request handling inside ServletRequestDataBinder #25990

🪲 Bug Fixes

  • Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26027
  • Autowiring does not work reliably in case of dynamically changing prototype bean class #26020
  • Order of profiles in tests is not preserved #26008
  • SseEmitter: connection closed after first event #25989

📔 Documentation

  • Fix a broken Asciidoctor syntax in core-resources.adoc #26000

v5.3.0

27 Oct 15:55
Compare
Choose a tag to compare

⭐ New Features

  • Allow cache eviction for ConcurrentLruCache #25963
  • Support Optional for query parameters in UriBuilder and UriComponentsBuilder #25951
  • Deprecate StringUtils.isEmpty(Object) and replace remaining usage (e.g. with ObjectUtils.isEmpty) #25945
  • Introduce RouterFunction attributes #25938
  • Discover @Sql, @SqlConfig, @SqlGroup, & @SqlMergeMode on enclosing class for nested test class #25913
  • Support Propagation.NEVER for disabling test-managed transactions #25909
  • Extensible invocation of TcpClient in ReactorNettyTcpClient #25889
  • Ignore duplicate configuration metadata for cache key in the TestContext framework #25800
  • Avoid use of String's for ContentDisposition type #25647
  • Expose access to STOMP SimpleMessageBroker sessions user Principal #25191
  • Allow programmatic registration of completion and error callbacks to transactional event listeners #24163
  • Support suspending functions annotated with @Transactional #23575
  • StompBrokerRelay doesn't send heartbeats to broker when @MessageMapping handles received messages #22822

🪲 Bug Fixes

  • @NestedTestConfiguration should not be discovered on enclosing class for nested interface #25917
  • UriComponentsBuilder controller method argument has no path #25822
  • Support multiple matchers in MockMvc Kotlin DSL #24103

📔 Documentation

  • Document @NestedTestConfiguration support #25912
  • Improve R2DBC DatabaseClient documentation regarding array/Collection-like bind parameters #25860
  • Document @DynamicPropertySource use cases that require @DirtiesContext #25850
  • Use lowercase property names in SpEL examples #25538

🔨 Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.4.0 #25969
  • Upgrade to RSocket 1.1.0 #25956
  • Upgrade to Reactor 2020.0.0 #25947
  • Upgrade to Gradle 6.7 #25918

❤️ Contributors

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

v5.2.10.RELEASE

27 Oct 14:24
Compare
Choose a tag to compare

⭐ New Features

  • Optimize Jackson resource management in codecs #25910
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25901
  • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25858
  • Cannot test @RequestPart multipart controllers with Servlet MockPart #25829
  • Add MariaDB to the supported database products for procedures and functions #25811
  • Optimize String argument resolution in MessageTag #25809
  • Avoid repeated Charset resolution in MimeType #25808

🪲 Bug Fixes

  • Incorrect http response for a request using the Range header for pre-compressed resources #25976
  • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25973
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25960
  • DataBufferUtils.CompositeMatcher causes poor performance when one or more matchers does not match #25915
  • HttpSeverOperations overrides content-length to 0 on HTTP HEAD #25908
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25864
  • JettyClientHttpConnector triggers early cancellation #25849
  • Race condition in DataBufferUtils.readAsynchronousFileChannel resulting in FD leak (Channel remains open) #25831
  • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25821
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25806
  • Thread-scoped bean creation freezes if dependent bean is retrieved before dependency bean #25801
  • Sending an event as part of the EMF lock triggers a deadlock #25799
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25657
  • SseEmitter (ResponseBodyEmitter) keeps collecting messages if not initialized #25442

📔 Documentation

  • Correct DispatcherServlet initialization sample webmvc.adoc #25965
  • Document that TransactionalEventListener only works with non-reactive transactions #25805
  • Published reference documentation contains unnecessary folders and files #25783
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25774

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.0.3 #25957
  • Upgrade to Reactor Dysprosium-SR13 #25946

v5.1.19.RELEASE

27 Oct 13:59
Compare
Choose a tag to compare

⭐ New Features

  • Optimize String argument resolution in MessageTag #25923
  • Avoid creation of unused logger instance in AbstractMediaTypeExpression #25902
  • Cannot test @RequestPart multipart controllers with Servlet MockPart #25894
  • Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25862
  • Add MariaDB to the supported database products for procedures and functions #25812

🪲 Bug Fixes

  • Incorrect http response for a request using the Range header for pre-compressed resources #25979
  • @ActiveProfiles with same profiles but different order results in duplicate ApplicationContext #25974
  • LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25961
  • jsessionid breaks request mappings when removeSemicolonContent is turned off #25867
  • SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25835
  • Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25818
  • ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25807

📔 Documentation

  • Published reference documentation contains unnecessary folders and files #25794
  • Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25775

🔨 Dependency Upgrades

  • Upgrade to Reactor Californium-SR22 #25948

v5.3.0-RC2

13 Oct 14:44
Compare
Choose a tag to compare
v5.3.0-RC2 Pre-release
Pre-release

⭐ New Features

  • Compatibility with Jackson 2.12 #25907
  • Loggers apparently constructed on a per HTTP request basis in reactive web code cause CPU overhead #25900
  • @ControllerAdvice order defined via @Order on a @Bean method is not applied #25872
  • Add missing awaitBodilessEntity and createExceptionAndAwait ClientResponse extensions #25866
  • Add Dependencies Manifest Entry to spring-core #25852
  • Subclasses of UrlBasedViewResolver could avoid reflection when creating instances of View #25847
  • Add option to disable Last-Modified handling when serving static resources #25845
  • FormHttpMessageConverter to preserve parameters from the input MediaType #25839
  • Request data binding fails for params with an empty array "[]" suffix #25836
  • Support for an async determination of status and headers with a WebMvc HandlerFunction #25828
  • Deprecate LiveBeansView #25820
  • MultipartFile[] required controller param, not throwing exception #25819
  • Optimize StringUtils trimLeading/Trailing methods #25810
  • Set the sameSite cookie attribute in ClientHttpResponse implementations #25785
  • Unable to change Clock for spring framework scheduling #25782
  • Resolve Principal argument only when not annotated #25780
  • Use the function endpoint, filter the handler function, and find that remoteAddress is null, params is empty #25776
  • Add kotlinx.serialization JSON support to Spring WebFlux #25771
  • Make path pattern optional in router functions #25752
  • Deprecate WebClient#exchange() and provide safer alternatives #25751
  • Easing the application of CORS default settings through the WebMvcConfigurer#corsConfigurer method #25716
  • Empty or blank required UUID header validation results in 200 response status #23939
  • Support suspending handler methods in Spring MVC #23611
  • Introduce Converter.andThen(...) #23379
  • Remove inefficiency in HttpStatus.series() #22366
  • Provide Gson/JSON-B MessageConverter for spring-messaging (aligned with spring-web) #21496
  • Discover test configuration on enclosing class for nested test class [SPR-15366] #19930

🪲 Bug Fixes

  • WebTestClient no longer captures the URI template #25854
  • Webflux Routing DSL's onError filters execute in unexpected order #25541
  • TransactionalOperator.executeAndAwait returns value too early #25007

📔 Documentation

  • Document DefaultPartHttpMessageReader #25827
  • Update WebFlux documentation with regards to logging appenders #25547
  • Upgrade to Asciidoctor Gradle plugin 3.x #24991

🔨 Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.4.0-M1 #25914
  • Upgrade to RSocket 1.1.0-RC1 #25898
  • Upgrade to Reactor 2020.0.0-RC2 #25884
  • Upgrade to Kotlin 1.4.10 #25779

❤️ Contributors

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

v5.3.0-RC1

15 Sep 14:48
Compare
Choose a tag to compare
v5.3.0-RC1 Pre-release
Pre-release

⭐ New Features

  • MimeMessageHelper should not encode attachment filenames by default #25770
  • A beforeCommit chain failure invariably results in a 500 response #25753
  • Improve performance of JdkDynamicAopProxy.getProxy(ClassLoader) #25660
  • Add URI variables to request context in AbstractUrlHandlerMapping (reactive) #25648
  • Public method in RSocketMessageHandler to register any handler method #25639
  • Allow early decoration of request and response in WebFlux #25633
  • Spring Test: Methods should allow supertypes of Matcher using lower bounded wildcards #25610
  • WebSocket configuration doesn't work properly with the buffer size limitation #25581
  • Declare interfaces as @FunctionalInterface where feasible #25580
  • Call StartupStep.end in finally block #25572
  • Support filename hint for client side use of ResourceDecoder #25516
  • No way to set timeout for the requests when using Jetty reactive httpclient #25493
  • Mime type "application/*" is not compatible with "application/vnd+json" #25350
  • Avoid resizing of fixed-size HashMap #25349
  • Support RSocket Load Balancing #25333
  • WebClient HTTP Request Timeout #25115
  • Support a RowMapper<T> for Java record classes #24695
  • Data binding for Java record classes #24391
  • Failure to bind a component of a form backing object using constructor binding causes the object to be null #24372
  • Concurrent access to ParsedSql cache in NamedParameterJdbcTemplate #24197
  • WebClient: wrap connection exceptions #23842
  • Extract MimeTypeUtils.ConcurrentLruCache and make it public #22789
  • WebSocket support with @EnableWebFlux #22587
  • Add kotlinx.serialization JSON support to Spring MVC #21188
  • Common API for MockMvc tests and for real HTTP tests #19647

🪲 Bug Fixes

  • Upgrading from Boot 2.3.3 or 2.4-M1 to Boot 2.4-M2 uses 125mb heap in BitsCronField #25687
  • Copy httpHandlerDecorator in copy constructor for WebHttpHandlerBuilder #25656
  • MockMvc does not correctly initialize the request for non-file mock Part uploads #25602
  • WebFlux application server add server.forward- Headers - Strategy = Framework RouterFunction endpoint 404 #25270

📔 Documentation

  • Fix typo in Regular Expression Pointcuts docs #25767
  • Fix typo regarding Ordered interface in core-aop.adoc #25759
  • Fix typo in websocket.adoc #25630
  • Eliminate unnecessary word in core-bean.adoc that causes repetition #25585
  • Publish documentation under reference/html folder #25071

🔨 Dependency Upgrades

  • Upgrade to RSocket 1.1 M2 #25729
  • Upgrade to Reactor 2020 RC1 #25728
  • Upgrade to Kotlin 1.4.0 #25617
  • Upgrade to Gradle 6.6 #25578
  • Upgrade to JUnit 5.7 #25527

❤️ Contributors

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