Skip to content

Releases: spring-projects/spring-framework

v6.0.0-M2

13 Jan 11:05
Compare
Choose a tag to compare
v6.0.0-M2 Pre-release
Pre-release

⭐ New Features

  • Stop defining a TaskScheduler bean in WebSocketConfigurationSupport #27903
  • Remove unnecessary check in isBridgedCandidateFor() #27862

🐞 Bug Fixes

  • StrictHttpFirewall rejects request when HtmlUnit WebClient is called with encoded URL #27837

πŸ“” Documentation

  • Fix typo and use of componentry #27852

πŸ”¨ Dependency Upgrades

  • Upgrade to Kotlin Coroutines 1.6.0 #27878
  • Upgrade to Kotlin serialization 1.3.2 #27879

❀️ Contributors

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

v5.3.15

13 Jan 12:23
Compare
Choose a tag to compare

⭐ New Features

  • PrintingResultHandler in MockMvc should infer UTF-8 encoding for JSON response #27926
  • WebFlux request id should not contain internal IPs #27885
  • Deprecate inappropriate getBeanFactory() method in AbstractBeanDefinitionReader #27875
  • Make H2SequenceMaxValueIncrementer compatible with H2 database 2.0.x #27870
  • Improve error message in ResolvableType.forClassWithGenerics() #27847
  • Use of RequestPart with String leads to a file descriptor leak #27773
  • Expose headers from native client request after request is committed #27768

🐞 Bug Fixes

  • Cannot read server-sent events without data (a.k.a. heartbeats) #27923
  • ArrayIndexOutOfBoundsException with STOMP and Jetty 10 #27899
  • ServerHttpResponseDecorator does not delegate methods for raw status code #27889
  • Clear cache when clearing argument resolvers #27888
  • Duplicated content-type response header on error response #27887

πŸ“” Documentation

  • Fix syntax in WebFlux Validation example #27907
  • Add Section on Authorization to STOMP WebSocket documentation #27906
  • Correct not compiling example code in Data Access docs #27886

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.15 #27897

❀️ Contributors

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

v6.0.0-M1

16 Dec 14:32
Compare
Choose a tag to compare
v6.0.0-M1 Pre-release
Pre-release

See also the upgrade instructions.

⭐ New Features

  • Deprecate CachingConfigurerSupport and AsyncConfigurerSupport #27813
  • Deprecate StringUtils::trimWhitespace #27769
  • Enforce Future or void return declaration for each asynchronously executed method (e.g. with class-level @Async) #27734
  • Avoid unescape when CONNECT and CONNECTED frames #27722
  • Support SQUARE brackets [] around NAMED parameter #27716
  • Change StringUtils trimWhitespace to String.strip() #27703
  • Retrieve MethodMetadata for all user-declared methods in the order of declaration #27701
  • Refactor HttpMethod from enum to class #27697
  • Use parseInt without substring method #27680
  • Consistently replace String encoding names with StandardCharset arguments #27664
  • Use 'toString(Charset)' instead of 'toString(String)' for encodings #27646
  • Add method to ClientResponse that returns Mono terminating with createException #27637
  • Create immutable MultiValueMap wrapper #27608
  • Revisit MediaType ordering #27580
  • Optimize header removal in ForwardedHeaderFilter #27466
  • Change default driver in XStreamMarshaller from XppDriver to DomDriver #27464
  • Retain support for legacy JSR-250 javax.annotation.PostConstruct/PreDestroy and JSR-330 javax.inject.Inject in addition to Jakarta EE 9 annotations #27444
  • change string http header to enum #27356
  • Allow BeanUtils#instantiateClass inlining with native #27072
  • Remove support for deprecated Java SecurityManager #26901
  • CommonAnnotationBeanPostProcessor jakarta.annotation-api:2.0.0 support (@PostConstruct/Predestroy) #26185
  • @Transactional does not work on package protected methods of CGLib proxies #25582
  • Add support for explicit generic type in PayloadApplicationEvent #24599
  • Add Kotlin extensions for Cache and CacheManager #23927
  • JDK 11 HttpClient integration with WebClient #23432
  • @RequestMapping without @Controller registered as handler [SPR-17622] #22154
  • Upgrade Spring Context Support to Jakarta EE's com.sun.mail:jakarta.mail and com.sun.activation:jakarta.activation [SPR-17561] #22093
  • Enable support for custom vnd types in messaging MappingJackson2MessageConverter [SPR-15712] #20269
  • Add support for instant in @DateTimeFormat #19846
  • Support YearMonth and MonthDay with the @DateTimeFormat annotation #1215

πŸ“” Documentation

  • Update javadoc and reference docs for consistent version and package references to the Jakarta EE 9 APIs #27689
  • Use default stylesheet for generated Javadoc HTML #27496

πŸ”¨ Dependency Upgrades

  • Support for Jakarta EE 9 (annotations and interfaces in jakarta.* namespace) #25354
  • Support for Jetty 11 #27424
  • Upgrade to AspectJ 1.9.8 for official Java 17 support #27537
  • Upgrade to Kotlin 1.6.10 #27413

❀️ Contributors

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

v5.3.14

16 Dec 09:09
Compare
Choose a tag to compare

⭐ New Features

  • Add default methods to CachingConfigurer #27811
  • Provide a variant of ListableBeanFactory.findAnnotationOnBean(String, Class) that does not initialize factory beans #27796
  • Convert single null argument to Optional.empty() in SpEL varargs expression #27795
  • Declare serialVersionUID on DefaultAopProxyFactory #27784
  • The ReactorClientHttpConnector must apply mapper before tcpConfiguration() #27749
  • Add getter for RequestMappingInfo builder config #27723
  • Give warning when using capturing patterns with the AntPathMatcher #27688
  • Support for customization of 404 response when RouterFunctionWebHandler finds no routes #25358
  • ModelAndView.status does not work with RedirectView #25092
  • ThreadPoolExecutorFactoryBean add ability to prestart threads #1246
  • Support empty attributes in TagWriter #910

🐞 Bug Fixes

  • AsyncConfigurer implementations are loaded too early #27808
  • Possible NPE in Spring MVC LogFormatUtils #27782
  • Extending CachingConfigurerSupport results in at least one log message about not being eligible for full post-processing #27751
  • WebFlux ServerResponse does not overwrite already present response headers #27741
  • Passing single null value in varargs SpEL expression results in NullPointerException #27719
  • UriUtils::extractFileExtension does not properly handle empty file names #27639
  • References of CountingBeforeAdvice target its previous location #22246
  • ProxyFactoryBean getObject called before setInterceptorNames, silently creating an invalid proxy [SPR-7582] #12238

πŸ“” Documentation

  • Remove references to AsyncConfigurerSupport as AsyncConfigurer should be used instead #27812
  • Fix javadoc reference to ThrowsAdvice #27804
  • Suggested WebSocket config causes circular bean reference #27746
  • Document the difference in generics resolution between @Autowired and beanFactory.getBeanProvider #27727
  • Clarify that interface-level cache annotations work for target-class proxies as well #27726
  • SchedulerFactoryBean no longer sets the job store's DataSource when the job store class has been customized #27709
  • Fix typo #27699
  • Fix incorrect example of error handling in WebClient Javadoc #27645
  • Missing reference documentation for WebSocketScope #25172
  • Clarify behaviour of AnnotationBeanNameGenerator with acronyms #2030
  • Fix simple data format in appendix #1025
  • Update StoredProcedure.java declareParameter method JavaDoc #1000
  • Document @Bean definitions via default methods #767
  • Improved DataBinder Javadoc for xxx*yyy pattern matching. #699

πŸ”¨ Dependency Upgrades

  • Upgrade to ASM 9.3 (for early Java 19 support) #27740
  • Upgrade to JUnit 5.8.2 #27744
  • Upgrade to Reactor 2020.0.14 #27793

❀️ Contributors

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

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!