Skip to content

Releases: spring-projects/spring-framework

v6.0.19

11 Apr 08:14
Compare
Choose a tag to compare

⭐ New Features

  • Log column type for limited support message in JdbcUtils.getResultSetValue #32602
  • Avoid additional unnecessary Annotation array cloning in TypeDescriptor #32478
  • Avoid cloning empty Annotation array in TypeDescriptor #32465

🐞 Bug Fixes

  • Refine scheme, userinfo, host and port parsing in UriComponentsBuilder #32617
  • MethodIntrospector.selectMethods() fails to detect bridge methods across ApplicationContexts #32587
  • Generic interface on FactoryBean class not autowired in case of targetType mismatch #32585
  • HeaderContentNegotiationStrategy.resolveMediaTypes() throws unexpected InvalidMimeTypeException #32484
  • JmsUtils.commitIfNecessary catches and ignores JMS IllegalStateException, losing message with ActiveMQ Artemis #32479
  • Consistently apply TaskDecorator to ManagedExecutorService as well #32456

πŸ“” Documentation

  • Fix broken link to vavr in the reference guide #32495

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.18 #32593

v5.3.34

11 Apr 07:45
Compare
Choose a tag to compare

⭐ New Features

  • Log column type for limited support message in JdbcUtils.getResultSetValue #32603
  • Avoid additional unnecessary Annotation array cloning in TypeDescriptor #32477
  • Avoid cloning empty Annotation array in TypeDescriptor #32466

🐞 Bug Fixes

  • Refine scheme, userinfo, host and port parsing in UriComponentsBuilder #32618
  • MethodIntrospector.selectMethods() fails to detect bridge methods across ApplicationContexts #32588
  • JmsUtils.commitIfNecessary catches and ignores JMS IllegalStateException, losing message with ActiveMQ Artemis #32480
  • Consistently apply TaskDecorator to ManagedExecutorService as well #32457

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.43 #32594

v6.1.5

14 Mar 10:22
Compare
Choose a tag to compare

⭐ New Features

  • Extract reusable method for URI validations #32440
  • Allow UriTemplate to be built with an empty template #32432
  • Optimize Coroutine invocations #32390
  • Improve exception message when Scheduled tasks that are using Virtual Threads fail on shutdown #32381
  • Add query parameters to MockMvc Kotlin DSL #32371
  • Optimize content type parsing in ServletServerHttpResponse #32361
  • Refine handling of disconnected client error in ExceptionHandlerExceptionResolver #32359
  • Refine \*HttpMessageConverter#getContentLength return value null safety #32325
  • Optimize HttpHeaders.getAcceptLanguageAsLocales #32318
  • SimpleAsyncTaskScheduler: consistently apply default error handling #32298
  • Use Spliterator of underlying collection in MutablePropertyValues / MutablePropertySources #32281

🐞 Bug Fixes

  • SpEL fails to compile expression indexing into boolean array #32400
  • WebClient Observations are missing error #32389
  • WebClient request sent twice instantly when using @Cacheable #32370
  • AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32365
  • Fix ServletResponseHttpHeaders#get null handling #32362
  • Compiled SpEL expression fails if #root or #this is a non-public type #32356
  • Suspend handler methods fail on nullable value class parameters #32353
  • Better protect against concurrent error handling for async requests #32340
  • Performance degradation due to Kotlin value class checks #32334
  • With value referenced from property file in XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory) #32329
  • constructor-impl of Kotlin value class is not called #32324
  • ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32317
  • Hibernate native image support broken by HHH-17643 #32311
  • Revisit DatabaseMetadata#getProcedures to only apply fallback if original search yield more than one result #32295
  • Remove Observation.Context from WebClient request #32198

πŸ“” Documentation

  • Refine "Redirecting to a resource" section code sample #32423
  • Javadoc of ReactorNettyClientRequestFactory#setExchangeTimeout methods have wrong default value #32419
  • Fix order of 2 sections in the Validation chapter of the reference manual #32408
  • Fix Javadoc #32403
  • Document that SpEL expressions using array construction cannot be compiled #32401
  • Improve documentation for @Sql execution phases regarding lifecycle #32343
  • Omit parameter names in REST Clients section of reference docs #32335
  • Different transaction name when using TransactionAspectSupport.currentTransactionStatus().transactionName #32310
  • Provide guidelines for using Kotlin properties with proxies (@RequestScope and similar use cases) #32287
  • Correct documentation for userDestinationPrefix in MessageBrokerRegistry #32272

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.12.4 #32431
  • Upgrade to Reactor 2023.0.4 #32420

❀️ Contributors

Thank you to all the contributors who worked on this release:

@Xednar, @ZeroCyan, @bsgrd, @ddaaac, @kilink, @qeeqez, and @quaff

v6.0.18

14 Mar 09:52
Compare
Choose a tag to compare

⭐ New Features

  • Extract reusable method for URI validations #32441
  • Allow UriTemplate to be built with an empty template #32437
  • Refine \*HttpMessageConverter#getContentLength return value null safety #32333

🐞 Bug Fixes

  • WebClient Observations are missing error #32399
  • AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32368
  • Better protect against concurrent error handling for async requests #32341
  • ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32321
  • Hibernate native image support broken by HHH-17643 #32312

πŸ“” Documentation

  • Fix order of 2 sections in the Validation chapter of the reference manual #32409

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.17 #32421

v5.3.33

14 Mar 09:32
Compare
Choose a tag to compare

⭐ New Features

  • Extract reusable method for URI validations #32442
  • Allow UriTemplate to be built with an empty template #32438
  • Refine *HttpMessageConverter#getContentLength return value null safety #32332

🐞 Bug Fixes

  • AopUtils.getMostSpecificMethod does not return original method for proxy-derived method anymore #32369
  • Better protect against concurrent error handling for async requests #32342
  • Restore Jetty 10 compatibility in JettyClientHttpResponse #32337
  • ContentCachingResponseWrapper no longer honors Content-Type and Content-Length #32322

πŸ“” Documentation

  • Build KDoc against 5.3.x Spring Framework Javadoc #32414

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.42 #32422

v6.1.4

15 Feb 11:05
Compare
Choose a tag to compare

⭐ New Features

  • Add missing RequestPredicate variants in coRouter #32256
  • Adapt ConcurrencyThrottleSupport to use ReentrantLock for better virtual thread support #32251
  • Create optimized versions of request predicates #32244
  • Include function name in SpelMessage.INCORRECT\_NUMBER\_OF\_ARGUMENTS\_TO\_FUNCTION #32239
  • Add Coroutines support to NonReactiveHandlerMethodPredicate #32227
  • RouterFunctionMapping does not implement MatchableHandlerMapping #32221
  • Initialize (another) Map with correct size in RequestPredicates #32215
  • Make SmartLifecycle phase value configurable in STOMP message handling components #32205
  • Initialize Map with correct size in RequestPredicates #32201
  • Let BeanPropertyRowMapper subclasses customize mapped names #32199
  • Improve client and server handling of STOMP heartbeat failures #32195
  • Optimize Map methods in ServletAttributesMap #32189
  • Support binary streams with JdbcClient #32161
  • Annotate core functional SPIs in SpEL with @FunctionalInterface #32135
  • Cannot use SimpleJdbcInsert with catalog name #32124
  • Refactor ReloadableResourceBundleMessageSource #32118
  • Reuse MapPropertySource for DynamicValuesPropertySource implementation (as a template for custom variants) #32110
  • Improve Spring AOP performance for methods without specific advice #32104
  • Make it possible to configure any TaskExecutor through ChannelRegistration #32081
  • Add support for JSON streams to Kotlin Serialization #32074
  • Avoid reflecting to obtain validationGroups every time the call is made #32068
  • Reject @RequestMapping and @HttpExchange declarations on the same element #32065
  • Missing toString for ExponentialBackOff #32061
  • Reject multiple @HttpExchange declarations on the same element #32049
  • ClientAbortException from StreamingResponseBody can cause infinite loop of dispatches #32042
  • Log warning if multiple @PostMapping, @GetMapping, etc. annotations are declared #31962
  • Using types in @SessionAttributes is sometimes not reflected in the model #30463
  • Improve read publisher cancel handling to avoid connections in CLOSE_WAIT state with WebSocket on Tomcat #30393
  • Provide more control over JPA entities scanning #27892
  • Provide and document a way to handle single-page application redirects #27257
  • MockMvcClientHttpRequestFactory swallows ServletResponse.errorMessage #26720

🐞 Bug Fixes

  • Cannot send Server-Sent Events without data using WebMvc.fn SseBuilder #32270
  • Fix pathExtension null-safety in Kotlin DSLs #32254
  • SimpleEvaluationContext.Builder is not final and has a public constructor #32253
  • @JsonDeserialize(builder = ...) does not work in GraalVM native image #32238
  • RestClientAdapter claims it supports request attributes when it does not #32232
  • ThreadPoolTaskExecutor rejecting tasks as soon as the context has been closed can lead to exceptions during web app shutdown #32226
  • Consistent parsing of user information in UriComponentsBuilder #32211
  • "IllegalStateException: Cannot call sendError() after the response has been committed" when IOException is thrown during resolving method argument values on Tomcat >= 10.1.16 #32206
  • No longer able to override the toString() in HandlerMethod from 6.1.3 #32184
  • 6.1.3 regression: aspect not called with multiple inheritance #32181
  • Unable to use baseUrl on builders created from RestTemplate #32180
  • MessageDeliveryException on shutdown with open WebSocket connections #32171
  • With XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory in 6.1.3 from convertForProperty method) #32159
  • Cannot process AOT when spring-orm is on the classpath without JPA #32155
  • SpEL's Indexer.setArrayElement() incorrectly requests conversion to wrapper instead of primitive #32147
  • SpEL increment and decrement operators do not generate prefix AST representation #32144
  • Validation of PartEventHttpMessageReader#maxParts is off by one #32122
  • QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32106
  • Guard against multiple body subscriptions in Jetty and JDK reactive responses #32100
  • Parameter based cache keys on repository methods can't resolve after 6.1.2->6.1.3 #32087
  • Exceptions thrown by custom error handlers are not recorded in RestTemplate observations #32060
  • Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32039
  • RestClient calls interceptors from RestTemplate twice #32038
  • DefaultRestClientBuilder.defaultRequest(...) doesn't do anything #32028
  • Alias resolution error message in SimpleAliasRegistry is misleading #32025
  • Destroy method not found in Native image for ExecutorService Bean type #32006
  • RequestPredicate fails with WebFlux 6.1.2 #31955
  • ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #31865

πŸ“” Documentation

  • Fix Kotlin syntax errors in RestClient builder example in rest-clients.adoc #32265
  • Use double dot in "META-INF/aop.xml" documentation #32264
  • Document that functions are variables in SpEL EvaluationContexts #32258
  • Add section on AOT best practices about registering beans programmatically #32241
  • Add section on AOT best practices about registering singletons #32240
  • Fixes syntax error in JdbcClient examples #32236
  • Document @RequestAttribute in HTTP clients [#32231](https://github.com/spring-projects/spring-framework...
Read more

v6.0.17

15 Feb 12:51
Compare
Choose a tag to compare

⭐ New Features

  • RouterFunctionMapping does not implement MatchableHandlerMapping #32222
  • Optimize Map methods in ServletAttributesMap #32197

🐞 Bug Fixes

  • @JsonDeserialize(builder = ...) does not work in GraalVM native image #32257
  • Consistent parsing of user information in UriComponentsBuilder #32246
  • "IllegalStateException: Cannot call sendError() after the response has been committed" when IOException is thrown during resolving method argument values on Tomcat >= 10.1.16 #32207
  • Cannot process AOT when spring-orm is on the classpath without JPA #32160
  • QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32107
  • Guard against multiple body subscriptions in Jetty and JDK reactive responses #32102
  • Exceptions thrown by custom error handlers are not recorded in RestTemplate observations #32063
  • Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32050
  • ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #32020
  • Destroy method not found in Native image for ExecutorService Bean type #32017

πŸ“” Documentation

  • Update basics.adoc #32151
  • Document cron-vs-quartz parsing convention for dayOfWeek part in CronExpression #32130

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.16 #32275

v5.3.32

15 Feb 14:00
Compare
Choose a tag to compare

⭐ New Features

  • Add CORS support for Private Network Access #31974
  • Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31969

🐞 Bug Fixes

  • Consistent parsing of user information in UriComponentsBuilder #32247
  • QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32108
  • Guard against multiple body subscriptions in Jetty and JDK reactive responses #32101
  • Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32051
  • ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #32021
  • Spring AOP does not propagate arguments for dynamic prototype-scoped advice #31964
  • MergedAnnotation swallows IllegalAccessException for attribute method #31961
  • CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31950
  • MergedAnnotations finds duplicate annotations on method in multi-level interface hierarchy #31825
  • PathEditor cannot handle absolute Windows paths with forward slashes #31728
  • Include Hibernate's Query.scroll() in SharedEntityManagerCreator's queryTerminatingMethods set #31684
  • TypeDescriptor does not check generics in equals method (for ConversionService caching) #31674
  • Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31665
  • Jackson encoder releases resources in wrong order #31657
  • WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31642

πŸ“” Documentation

  • Document cron-vs-quartz parsing convention for dayOfWeek part in CronExpression #32131

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.41 #32276

v6.1.3

11 Jan 09:48
Compare
Choose a tag to compare

⭐ New Features

  • Perform checks for bean validation constraints in HandlerMethod only when needed #32007
  • Exclude URI query from remaining WebClient checkpoints #31992
  • Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31967
  • Introduce processInjection() in CommonAnnotationBeanPostProcessor #31956
  • Make maximum length of SpEL expressions in an ApplicationContext configurable #31952
  • JdkClientHttpRequest may block indefinitely #31911
  • Allow Propagation.NOT\_SUPPORTED with @TransactionalEventListener #31907
  • Review HibernateJpaVendorAdapter to align dialect to use for recent Hibernate versions #31896
  • Improve method validation support for containers with constraints on container elements #31887
  • Method validation is not triggered when constraints are applied to the elements of a List #31870
  • Use standard String comparison in ExtendedBeanInfo.PropertyDescriptorComparator #31866
  • Detect Jetty 12 "max length exceeded" message for MaxUploadSizeExceededException #31850
  • Ensure that Observation is stopped and Scope is closed in doReceiveAndExecute() #31798
  • Support the use of @Resource in test classes in AOT mode #31733
  • Add support for configuring sslContext in StandardWebSocketClient #30680
  • Refine allocations for improved memory profile when creating a large amount of proxy instances #30499
  • Check ResponseStatusException reason as MessageSource code for ProblemDetail #30300
  • SpringValidatorAdapter fails in getRejectedValue if ValueExtractor used in property path to unwrap a container type #29043
  • Add CORS support for Private Network Access #28546
  • Introduce NoOpTaskScheduler for disabling @Scheduled tasks in test setups #28073
  • MvcUriComponentsBuilder should resolve property placeholders in request mapping paths #26795
  • Allow SockJsUrlInfo to be overridden in SockJsClient #25888
  • Extending abstract class does not expose parameter annotations #25788
  • DatabasePopulatorConfigUtils should only set a populator if matching scripts are defined #23405
  • @annotation pointcut is not matched with complex hierarchy and generics against classes compiled by Eclipse [SPR-17310] #21843
  • Allow registration of application event listeners in a functional way [SPR-16872] #21411
  • Allow CronTrigger to resume from specified timestamp [SPR-14909] #19475

🐞 Bug Fixes

  • Using a URI variable for port in WebClient causes an IllegalStateException #32003
  • [spring-tx] Unable to override prepareSynchronization of AbstractPlatformTransactionManager from v6.1.0 #32000
  • RestClientResponseException handles responseHeaders case-sensitive #31978
  • CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31948
  • HandlerMappingIntrospector is throwing PatternSyntaxException for wildcards in the request URL #31937
  • java.lang.NullPointerException with Scheduled tasks through DefaultScheduledTaskObservationConvention #31918
  • HibernateJpaVendorAdapter refers to org.hibernate.dialect.Oracle12cDialect that does not exist in recent Hibernate versions #31892
  • ClassNotFoundException: org.hibernate.dialect.MySQL57Dialect with Hibernate 6.4 #31889
  • Inconsistent inclusion of base URL in WebClient URI template attribute since Spring WebFlux 6.1.2 #31882
  • @Async does not support Unit? return type #31881
  • Web handlers don't support Kotlin extensions #31876
  • DefaultDataBuffer fails to transform its content to a string #31873
  • With XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory in 6.1) #31872
  • Complete frame callback when opcode is not PONG #31869
  • @Cacheable does not respect cache hit when empty Mono/Flux response is returned #31868
  • Unable to use sync cache with reactivestreams #31861
  • Spring Websocket - JettyWebsocketHandlerAdapter copyByteBuffer fills Buffer with zeros #31857
  • NullPointerException with @RequestMapping on Kotlin property accessors #31856
  • Non-deterministic native image JSON hints invalidate Gradle build cache #31852
  • DefaultServerRequestObservationConvention is silently used when multiple convention beans are defined #31864
  • Significant increase in memory consumption StringDecoder when splitting input by delimiters. #31848
  • Convert args to Kotlin value class in CoroutinesUtils #31846
  • ForwardedHeaderFilter should reject invalid requests #31842
  • NotReadablePropertyException due to mismatch between ConstraintViolation property path and BindingResult target in MethodValidationAdapter #31746
  • Built-in method validation validates @RequestBody parameter twice #31711
  • Double error response handling on suspended methods #31541
  • Spring AOP does not propagate arguments for dynamic prototype-scoped advice #28407
  • Only log status in ServletRequestHandledEvent #27595
  • MergedAnnotation swallows IllegalAccessException for attribute method #27182
  • AOP pointcut erroneously matching ProceedingJoinPoint.proceed when called from within another advised bean #26068

πŸ“” Documentation

  • Document exception handling for HTTP Interface client with RestClient and RestTemplate #31991
  • Update ContentRequestMatchers#multipartData Javadoc #31988
  • Update Spring Properties section of reference manual #31987
  • Document Kotlin internal modifier impact on @Bean #31985
  • Add missing preposition in reference guide #31977
  • Adapt Jackson2ObjectMapperBuilder documentation to mention ParameterNamesModule registration #31959
  • Fix typo in kotlin.adoc #31958
  • Fix references to "application/*+xml" in Javadoc...
Read more

v6.0.16

11 Jan 11:01
Compare
Choose a tag to compare

⭐ New Features

  • Exclude URI query from remaining WebClient checkpoints #32001
  • Add CORS support for Private Network Access #31975
  • Avoid early getMostSpecificMethod resolution in CommonAnnotationBeanPostProcessor #31968

🐞 Bug Fixes

  • Double error response handling on suspended methods #31990
  • DefaultDataBuffer fails to transform its content to a string. #31979
  • Spring AOP does not propagate arguments for dynamic prototype-scoped advice #31963
  • MergedAnnotation swallows IllegalAccessException for attribute method #31960
  • CronTrigger hard-codes default ZoneId instead of participating in scheduler-wide Clock setup #31949
  • HandlerMappingIntrospector is throwing PatternSyntaxException for wildcards in the request URL #31946
  • ForwardedHeaderFilter should reject invalid requests #31894
  • @Async does not support Unit? return type #31891
  • Significant increase in memory consumption StringDecoder when splitting input by delimiters. #31859

πŸ“” Documentation

  • Update ContentRequestMatchers#multipartData Javadoc #31989

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.15 #31997