Skip to content

Releases: spring-projects/spring-framework

v5.2.19.RELEASE

16 Dec 09:55
Compare
Choose a tag to compare

⭐ New Features

  • Declare serialVersionUID on DefaultAopProxyFactory #27785
  • Use ByteArrayDecoder in DefaultClientResponse::createException #27667

🐞 Bug Fixes

  • ProxyFactoryBean getObject called before setInterceptorNames, silently creating an invalid proxy [SPR-7582] #27817
  • Possible NPE in Spring MVC LogFormatUtils #27783
  • UndertowHeadersAdapter's remove() method violates Map contract #27593
  • Fix assertion failure messages in DefaultDataBuffer.checkIndex() #27577

πŸ“” Documentation

  • Lazy annotation throws exception if non-required bean does not exist #27660
  • Incorrect Javadoc in [NamedParameter]JdbcOperations.queryForObject methods regarding exceptions #27581
  • DefaultResponseErrorHandler update javadoc comment #27571

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR25 #27635
  • Upgrade to Log4j2 2.16.0 #27825

v5.3.13

11 Nov 08:01
Compare
Choose a tag to compare

⭐ New Features

  • Use ByteArrayDecoder in DefaultClientResponse::createException #27666
  • Improve the efficiency of UrlPathHelper.getSanitizedPath() #27623
  • Add option to cleanup multipart temp files #27613
  • Add support for custom expression parsing in CachedExpressionEvaluator #27604
  • Use LocalDataSourceJobStore only if one is not specified via Quartz properties #27560
  • Introduce TypeFilterUtils for processing @ComponentScan.Filter #27553
  • Improve mapping function in ExtendedEntityManagerCreator.createProxy() #27456

🐞 Bug Fixes

  • Static resources are missing when jar does not have a directory entry #27624
  • MultipartParser emits DataBufferLimitException about "Part headers exceeded the memory usage limit" unexpectedly #27612
  • UndertowHeadersAdapter's remove() method violates Map contract #27592
  • SpEL vararg method invocation fails if string literal contains a comma #27582

πŸ“” Documentation

  • Fix grammar in webflux-webclient.adoc #27657
  • Lazy annotation throws exception if non-required bean does not exist #27649
  • Clarify LogFormatUtils limitLength vs replaceNewlines parameters #27632
  • PersistenceExceptionTranslationInterceptor attempting to instantiate prototype PersistenceExceptionTranslator beans #26412

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.13 #27636

❀️ Contributors

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

v5.3.12

21 Oct 06:16
Compare
Choose a tag to compare

🐞 Bug Fixes

  • Update warn log message for empty static resource locations #27575
  • Default content type of response changed in v5.3.11 #27573
  • Fix assertion failure messages in DefaultDataBuffer.checkIndex() #27567

πŸ“” Documentation

  • Incorrect Javadoc in [NamedParameter]JdbcOperations.queryForObject methods regarding exceptions #27559

❀️ Contributors

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

v5.3.11

14 Oct 09:58
Compare
Choose a tag to compare

⭐ New Features

  • Enhance DefaultResponseErrorHandler to allow logging complete error response body #27552
  • Include correct keyword in CookieAssertions failure messages #27550
  • Use Arrays.hashCode() in ByteArrayResource.hashCode() #27544
  • Allow default CacheAwareContextLoaderDelegate configuration via a system property #27540
  • Invoke bean-derived (Auto)Closeable.close() method directly #27504
  • Defensive reference to JNDI API for JDK 9+ (optional java.naming module) #27483
  • DefaultMessageListenerContainer does not log an error/warning when consumer tasks have been rejected #27451
  • Provide accessor on externallyManaged RootBeanDefinition attributes #27449
  • Allow to avoid class validation in CglibAopProxy via ProxyFactory #27439
  • Add support for non-public record declarations #27437
  • Emit WebClientResponseException for malformed HTTP response #27262
  • DatabasePopulatorUtils.execute should commit if the current Connection has auto-commit set to false #27008

🐞 Bug Fixes

  • CronTrigger uses new Date() instead of context's Clock #27546
  • Performance impact of con.getContentLengthLong() in AbstractFileResolvingResource.isReadable() downloading huge jars to check component length #27541
  • Performance impact of ResourceUrlEncodingFilter on HttpServletResponse#encodeURL #27538
  • UriTemplateRequestEntity doesn't override hashCode() and equals() #27531
  • DataBufferUtils.write loses context #27517
  • Avoid duplicate JCacheOperationSource bean registration in <cache:annotation-driven /> #27499
  • Proxy generation with Java 17 fails with "Cannot invoke "Object.getClass()" because "cause" is null" #27490
  • MediaType.sortBySpecificityAndQuality throws java.lang.IllegalArgumentException: Comparison method violates its general contract #27488
  • Leading whitespaces are removed while reading SSE response #27473
  • Non-escaped closing curly brace in RegEx results in initialization error on Android #27467
  • ConcurrentReferenceHashMap's entrySet violates the Map contract #27454
  • Avoid early ConversionService determination in StandardBeanExpressionResolver #27446
  • Spring Framework >= 5.3.8 ASM ClassReader fails to parse class file due to InputStream optimization #27429
  • StringUtils.collectionToDelimitedString(?) fails with NullPointerException when the collection contains null #27419
  • Spring HATEOAS results in 406 with Kotlin Coroutine and ResponseEntity in WebFlux #27292

πŸ“” Documentation

  • Remove remark about missing caching API. #27501

πŸ”¨ Dependency Upgrades

  • Upgrade to JUnit 5.8.1 #27450
  • Upgrade to Reactor 2020.0.12 #27527
  • Upgrade to SmallRye Mutiny 1.1.1 #27555

❀️ Contributors

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

v5.2.18.RELEASE

14 Oct 12:09
Compare
Choose a tag to compare

⭐ New Features

  • Enhance DefaultResponseErrorHandler to allow logging complete error response body #27558
  • DefaultMessageListenerContainer does not log an error/warning when consumer tasks have been rejected #27457

🐞 Bug Fixes

  • Performance impact of con.getContentLengthLong() in AbstractFileResolvingResource.isReadable() downloading huge jars to check component length #27549
  • Performance impact of ResourceUrlEncodingFilter on HttpServletResponse#encodeURL #27548
  • Avoid duplicate JCacheOperationSource bean registration in <cache:annotation-driven /> #27547
  • Non-escaped closing curly brace in RegEx results in initialization error on Android #27502
  • Proxy generation with Java 17 fails with "Cannot invoke "Object.getClass()" because "cause" is null" #27498
  • ConcurrentReferenceHashMap's entrySet violates the Map contract #27455

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR24 #27526

v5.3.10

15 Sep 07:42
Compare
Choose a tag to compare

⭐ New Features

  • Invalid JavaBean property 'logoutHandlers' being accessed (warning in the logs for Spring Security's ConcurrentSessionFilter) #27372
  • Convenient configuration of type permissions for XStream 1.4.18 #27343
  • Add SmallRye Mutiny support to ReactiveAdapterRegistry #27331
  • Introduce ExceptionCollector testing utility #27316
  • Support TimeUnit in the @Scheduled annotation #27309
  • Make it possible to determine if circular references are prohibited or if the cycle just couldn't be broken #27289
  • Support Charset for character encoding in MockMvc #27231
  • Support default character encoding for response in MockMvc #27230
  • Introduce setDefaultCharacterEncoding() in MockHttpServletResponse #27214
  • Use MessageSource for @ExceptionHandler methods #27203
  • ResponseStatusException.initCause always throws IllegalStateException #27196
  • Introduce soft assertions for WebTestClient #26969
  • Introduce soft assertions for MockMvc #26917
  • Blockhound flags a blocking call when WebFlux serves a static resource #26631
  • Optimize memory allocations in StringUtils#cleanPath #26316
  • InvocableHandlerMethod calls makeAccessible(getBridgedMethod()) on every call [SPR-15230] #19795

🐞 Bug Fixes

  • Support char, float, and double primitive default values in BeanUtils.instantiateClass() #27390
  • Fix memory leak on AOP Proxy class definition cache #27375
  • Fix response body missing 1st byte inside UnknownContentTypeException #27374
  • CommonsMultipartResolver and DEBUG logging lead to empty fileMap in MultipartHttpServletRequest #27350
  • Fix UrlPathHelper#shouldRemoveSemicolonContent() #27303
  • CompositeUriComponentsContributor#hasContributors: method name is not compliant with its intention #27271
  • Error with formatMapping method in AbstractMethodMessageHandler.java #27247
  • Apply default ResultHandlers before default ResultMatchers in MockMvc #27225
  • MockHttpServletResponse.characterEncoding should not be @Nullable #27219
  • WebSocketMessageBrokerStats.getExecutorStatsInfo() throws exception if Executor is not a ThreadPoolExecutor #27209
  • HtmlUnitRequestBuilder ignores file uploaded via HtmlFileInput.setData() #27199

πŸ“” Documentation

  • Fix wording in Javadoc of ClientResponse.mutate() #27389
  • Fix some typos and mistakes in docs #27388
  • Fix misplaced comma in AOP doc #27387
  • Fix Kotlin example for filtering handler functions #27337
  • Document when prepareTestInstance() is invoked when using the SpringMethodRule #27305
  • Fix duplicated "the" occurrences in Javadoc and XSD #27291
  • Fix typo in DefaultPartHttpMessageReader #27260
  • Fix reference to Optional.isPresent() in ObjectUtils.isEmpty() #27223
  • Clarify that ClientRequest.from(..) also copies body #27220
  • @Cacheable caches empty Optionals but documentation states otherwise #27184
  • Reference docs missing left-hand side navigation #27177

πŸ”¨ Dependency Upgrades

  • Compatibility with Jackson 2.13 #27206
  • Upgrade to JUnit 5.8 #27392
  • Upgrade to Kotlin 1.5.30 #27371
  • Upgrade to Reactor 2020.0.11 #27399

❀️ Contributors

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

v5.2.17.RELEASE

15 Sep 08:41
Compare
Choose a tag to compare

⭐ New Features

  • Invalid JavaBean property 'logoutHandlers' being accessed (warning in the logs for Spring Security's ConcurrentSessionFilter) #27396
  • Convenient configuration of type permissions for XStream 1.4.18 #27344
  • ResponseStatusException.initCause always throws IllegalStateException #27212

🐞 Bug Fixes

  • Support char, float, and double primitive default values in BeanUtils.instantiateClass() #27401
  • CommonsMultipartResolver and DEBUG logging lead to empty fileMap in MultipartHttpServletRequest #27398
  • Fix UrlPathHelper#shouldRemoveSemicolonContent() #27310
  • CompositeUriComponentsContributor#hasContributors: method name is not compliant with its intention #27275
  • WebSocketMessageBrokerStats.getExecutorStatsInfo() throws exception if Executor is not a ThreadPoolExecutor #27213

πŸ“” Documentation

  • Fix Kotlin example for filtering handler functions #27352
  • Document when prepareTestInstance() is invoked when using the SpringMethodRule #27312

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR23 #27378

v5.3.9

14 Jul 07:19
Compare
Choose a tag to compare

⭐ New Features

  • Configure CommonsMultipartResolver to support specific HTTP methods #27161
  • Allow BeanDefinitionBuilder to set an instance supplier with a ResolvableType #27160
  • Reason of @ResponseStatus on handler method is not resolved by MessageSource #27156
  • ResourceHandlerRegistry#getHandlerMapping should initialize handler once in outer loop #27153
  • Set synthetic flag using BeanDefinitionBuilder #27141
  • BeanCreationException error message should always include declaring class of constructor (or factory method) #27139
  • Improve Jetty 10 check in JettyClientHttpResponse #27136
  • Jetty10RequestUpgradeStrategy use an old jetty 9 class HandshakeRFC6455 #27121
  • ClassNotFoundException using Jetty 10 and its reactive client #27112
  • Use StringBuilder.append(char) where possible #27098
  • Consider "wss" and "https" for secure flag in Forwarded header checks #27097
  • SynchronossPartHttpMessageReader should only create temp directory when needed #27092
  • Implement equals, hashCode, & toString in BeanMethod and *Metadata types #27076
  • Remove logging dependency in BeanUtils #27070
  • Exclude sealed interfaces from auto-proxying (for JDK 17 compatibility) #27027
  • Blockhound error when running with transaction with a TransactionOperator #26955
  • Configure StandardServletMultipartResolver to only support multipart/form-data #26826
  • Add a way to set executeExistingDelayedTasksAfterShutdown from ThreadPoolTaskScheduler #26719
  • Apply dynamic changes in ThreadPoolTaskExecutor before setting local value #26700

πŸͺ² Bug Fixes

  • JettyHttpHandlerAdapter is not aware of Server[Request|Response]Wrapper #27146
  • {*path} pattern (CaptureTheRestPathElement) includes undocumented leading slash in @PathVariable path #27132
  • NoSuchMethodError when invoke JettyWebSocketSession.getRemoteAddress in jetty 10 #27120
  • CronExpression is still broken on spring-context-5.3.8 #27117
  • SimpleMethodMetadataReadingVisitor.Source.toString() omits separator for method arguments #27095
  • DefaultPathSegment allows shared empty parameters map to be mutated #27064
  • AOP auto-proxying with proxyTargetClass=true and introduction advice does not work for JDK proxy targets #27044
  • ServletRequestDataBinder assumes Standard servlet multipart handling #26999
  • DataClassRowMapper should not override Kotlin init properties #26569

πŸ“” Documentation

  • Add Javadoc @since to BeanDefinitionBuilder.setSynthetic() #27155
  • Fix link to Javadoc API #27151
  • Added description for HandlerInterceptor #27122
  • Fix typo in core-beans.adoc #27113
  • Fix typo in BeanDefinitionDsl.kt #27105
  • Improve docs for getContentAsByteArray method of ContentCachingRequestWrapper #27068
  • Fix explanation on default settings for content negotiation in reference doc #27067
  • Document that any @Valid* annotation triggers validation in the reference manual #27050
  • Improve RequestPartMethodArgumentResolver Javadoc #27043
  • Improve RequestResponseBodyMethodProcessor Javadoc #27042
  • Clarify that baseName in ResourceBundleMessageSource does not support multiple locations #27038
  • Link alternate documentation formats #27015

πŸ”¨ Dependency Upgrades

  • Compatibility with HtmlUnit 2.51 #27147
  • Upgrade to ASM 9.2 (for early Java 18 support) #27069
  • Upgrade to Kotlin 1.5.21 #27110
  • Upgrade to Kotlin Coroutines 1.5.1 #27157
  • Upgrade to Mockk 1.11.0 #27109
  • Upgrade to Reactor 2020.0.9 #27158

❀️ Contributors

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

v5.2.16.RELEASE

14 Jul 08:29
Compare
Choose a tag to compare

⭐ New Features

  • BeanCreationException error message should always include declaring class of constructor (or factory method) #27140
  • SynchronossPartHttpMessageReader should only create temp directory when needed #27094
  • Deprecate internal APIs in ScriptUtils implementations #26948

πŸͺ² Bug Fixes

  • AOP auto-proxying with proxyTargetClass=true and introduction advice does not work for JDK proxy targets #27148
  • SimpleMethodMetadataReadingVisitor.Source.toString() omits separator for method arguments #27096
  • DefaultPathSegment allows shared empty parameters map to be mutated #27065
  • Ignore comments when searching for SQL statement delimiter in ScriptUtils #26942
  • Ignore delimiter enclosed in double quotes in ScriptUtils #26936

πŸ“” Documentation

  • Fix @Transactional examples regarding method visibility #27005
  • Improve @Transactional docs regarding method visibility #27004
  • Document transactional semantics for @TransactionalEventListener after completion methods #26979

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR21 #27163

v5.3.8

09 Jun 08:08
Compare
Choose a tag to compare

⭐ New Features

  • HttpComponentsClientHttpConnector should close underlying resources #27032
  • Default value of StandaloneMockMvcBuilder.useSuffixPatternMatch differs from the same property in RequestMappingHandlerMapping #27030
  • Lookup method autowiring ignores method's generic info #26998
  • Set BEST_MATCHING_PATTERN_ATTRIBUTE on requests with WebMvc.fn #26963
  • Remove jackson-module-kotlin warning #26962
  • Switch back to parallel thread after WebSession id is generated #26958
  • Introduce ResponseEntity.internalServerError() #26952
  • Polish PORT_PATTERN in UriComponentsBuilder #26951
  • Deprecate/Remove internal APIs in ScriptUtils implementations #26947
  • Consider returning static DefaultApplicationStartup step #26939
  • Exception in Tomcat when SockJS top URL is a WebSocket upgrade #26933
  • Improve support for port numbers in allowedOriginPattern of CorsConfiguration #26927
  • Add ApplicationEvent constructor for specifying timestamp #26871
  • Add awaitExchangeOrNull extension function to reactive webclient #26778

πŸͺ² Bug Fixes

  • Revisit fix for gh-26905 in UriComponentsBuilder #27039
  • MultipartHttpMessageWriter in WebClient doesn't use custom Jackson Encoder since 5.3.3 #27017
  • PartFile name lost when building a MultiPart #27007
  • No replacement of deprecated CronSequenceGenerator.isValidExpression #26996
  • NPE if StompEndpointRegistry has allowedOrigins with null #26987
  • CronExpression is broken on spring-context-5.3.6 #26964
  • FlightRecorderApplicationStartup is not thread safe #26941
  • Ignore delimiter enclosed in double quotes in ScriptUtils #26935
  • Ignore comments when searching for SQL statement delimiter in ScriptUtils #26911

πŸ“” Documentation

  • spring-framework-main-code attribute has not been expanded in docs #27041
  • Document that class-level @ResponseStatus is inherited by @ExceptionHandler methods #27031
  • Improve @Transactional docs regarding method visibility #27003
  • Fix @Transactional examples regarding method visibility #27001
  • Fix typo in code example #26980
  • Document transactional semantics for @TransactionalEventListener after completion methods #26974
  • Fix typo #26973
  • Fix broken Javadoc tags #26967

πŸ”¨ Dependency Upgrades

  • Upgrade to ASM master #27023
  • Upgrade to Coroutines 1.5.0 #26897
  • Upgrade to JUnit 5.7.2 #26946
  • Upgrade to Kotlin 1.5.10 #27035

❀️ Contributors

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