Skip to content

Releases: spring-projects/spring-framework

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

v6.1.2

14 Dec 11:16
Compare
Choose a tag to compare

⭐ New Features

  • Optimize ContentCachingRequestWrapper allocation for known request size #31834
  • Inherit parent context in coRouter DSL #31831
  • Declare isStatic and releaseTarget as default methods on TargetSource #31820
  • Delegation support for JDBC 4.3 ConnectionBuilder and ShardingKeyBuilder #31795
  • Support for a read-only DataSource in LazyConnectionDataSourceProxy #31785
  • Add MySQLIdentityColumnMaxValueIncrementer #31784
  • Introduce overloaded MockPart constructor that accepts the Content-Type #31757
  • Introduce toString(Charset) in FastByteArrayOutputStream #31737
  • Avoid byte array copy in getContentAsString #31731
  • Improve "active" metrics handling in WebClient observations #31702
  • Make ResourceArrayPropertyEditor supports comma delimited location patterns #31700
  • Consistently log exceptions from TestExecutionListeners at WARN level #31688
  • Document need for -parameters flag in exception messages #31675
  • Improve @RegisterReflectionForBinding for enums #31570
  • Support direct shard database operation routing in Spring JDBC #31506
  • Log test aborted/skipped exceptions at INFO level in the TestContext framework #31479
  • Avoid double proxying for @Resource @Lazy fallback autowiring #31447
  • Add support for tuning the code generation for bean property values #31427
  • Avoid race condition in ConcurrentReferenceHashMap #31008
  • Allow functional bean registration to set bean order (equivalent to @Order) #30849
  • Allow AOT generated classes to be excluded from code analyzer tools #30824
  • Error page does not utilize forwarded prefix #30828
  • Fix SimpleJdbcCall named parameter binding for Sybase ASE #30231
  • DefaultWebClient ignores baseUrl when setting URI_TEMPLATE_ATTRIBUTE #30027
  • Avoid eager checkDefaultConnectionProperties call in LazyConnectionDataSourceProxy #29931
  • Allow TransactionAwareDataSourceProxy to eagerly fetch the connection #29423
  • Extract common value generator out of BeanDefinitionPropertyValueCodeGenerator #28999
  • PostgresCallMetaDataProvider should detect current schema as indicated by the JDBC Connection #28723
  • Implement setMaxTextMessageSize and setMaxBinaryMessageSize in JettyWebSocketSession #28325
  • Optimize cache used in AutowiredAnnotationBeanPostProcessor #28293
  • @Async aspect should clear cached executors when different BeanFactory set #28201
  • Component scanning should be able to ignore encrypted classes with invalid class version #27691
  • Property to control URL decoding in ServletCookieValueMethodArgumentResolver #26989
  • Support Predicate- based mappedHandler config in AbstractHandlerExceptionResolver #26772
  • SimpleJdbcCall with namedBinding=true for MS SQL Server #26072
  • Improve default setNull performance on PostgreSQL and MS SQL Server (e.g. for NamedParameterJdbcTemplate batch updates) #25679

🐞 Bug Fixes

  • <replaced-method /> unnecessarily requires explicit arg-type since 6.0 #31826
  • Avoid nested constructor data binding if there are no request parameters #31821
  • Custom Init or Destroy method from an interface cannot be invoked in a native image #31819
  • Avoid potential refresh deadlock with AbstractApplicationContext#registerShutdownHook #31811
  • Classes proxied by CGLIB produces NPE with coroutine async job on Springboot 3.2.0 #31809
  • Fix Comparators.nullsLow and Comporators.nullsHigh behavior #31808
  • MergedAnnotations finds duplicate annotations on method in multi-level interface hierarchy #31803
  • Pickup coroutineContext saved by CoWebFilter in coRouter #31793
  • Support for multiple CoWebFilters that change CoroutineContext #31792
  • TestCompiler should not discover annotation processors on the classpath by default #31791
  • @Cacheable key generator is called after invoking the cached method in case of a miss #31789
  • Encountered NotSerializableException for HttpComponentsHeadersAdapter when serializing HttpClientErrorException #31787
  • Exclude Part from nested constructor binding in WebFlux #31778
  • Fix condition for "Too many elements" in MimeTypeUtils.sortBySpecificity() #31769
  • AnnotatedTypeMetadata's getMergedRepeatableAnnotationAttributes() method ignores classValuesAsString #31768
  • SimpleAsyncTaskScheduler: task with fixed delay stops working after unhandled exception #31749
  • Spring unable to decode aggregated JSON content #31747
  • cannot resolve ServerRequest::pathVariable in nested RequestPredicate again #31732
  • @NotNull on JPA entity not respected in schema generation #31726
  • @Cacheable throws NullPointerException when encountering cached null value for empty Mono #31722
  • RestClient ResponseSpec.body() throws an exception instead of returning null if no response body is available #31719
  • UrlResource getFilename() suddenly returns null for certain paths #31718
  • DisconnectedClientHelper is missing "AbortedException" #31717
  • Constructor binding fails for Duration argument if request parameter is not present #31709
  • TraceId is missing in WebFlux controller handlers #31706
  • Wrong observation status tag when a Not Found in a webflux application #31703
  • Correct conversion from Resource[] with length 1 to Collection #31699
  • @ComponentScan added directly and via a meta-annotation leads to multiple scanning #31704
  • Unable to use kotlin value classes as function arguments to functions mapping web endpoints #31698
  • @DisabledInAotMode does not work in native image #31705
  • GenericTypeResolver does not resolve nested generics - causes...
Read more

v6.0.15

14 Dec 09:19
Compare
Choose a tag to compare

⭐ New Features

  • Skip buffer allocation in StreamUtils.copy(String) #31631

🐞 Bug Fixes

  • <replaced-method /> unnecessarily requires explicit arg-type since 6.0 #31828
  • MergedAnnotations finds duplicate annotations on method in multi-level interface hierarchy #31824
  • Fix condition for "Too many elements" in MimeTypeUtils.sortBySpecificity() #31773
  • Spring unable to decode aggregated JSON content #31772
  • Multipart messages with empty parts are not correctly parsed in WebFlux #31766
  • PathEditor cannot handle absolute Windows paths with forward slashes #31727
  • TraceId is missing in WebFlux controller handlers #31716
  • Wrong observation status tag when a Not Found in a webflux application #31715
  • Fail to register MBean with bean name containing invalid character #31708
  • Include Hibernate's Query.scroll() in SharedEntityManagerCreator's queryTerminatingMethods set #31683
  • TypeDescriptor does not check generics in equals method (for ConversionService caching) #31673
  • SpEL expression on a reloadable type can no longer be resolved #31670
  • Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31664
  • Jackson encoder releases resources in wrong order #31656
  • Current Observation.Context missing from WebClient request #31646
  • WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31641
  • <jee:local-slsb> no longer works with a business-interface attribute #31630
  • GeneratedFiles#addSourceFile should not allow to add a source in the default package #31629
  • PathResourceResolver.getResource() does not log warning if Resource#getURL() throws exception #31624

πŸ“” Documentation

  • Document explicit @ModelAttribute is required for reflection hints inference #31767
  • Documentation needs to be updated with instructions for STOMP Client #31678
  • Improve STOMP WebSocket documentation for input message buffer size #31654

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.14 #31815

v6.1.1

23 Nov 09:25
Compare
Choose a tag to compare

⭐ New Features

  • Skip buffer allocation in StreamUtils.copy(String) #31621
  • Caching and Event Listening support do not reuse internal delegates for their evaluation contexts #31617
  • Java 17: resource.isReadable() with concurrency leaks large amounts of non-heap memory #30955

🐞 Bug Fixes

  • Spring MVC: Unexpected bytes added to the HTTP response for kotlin.Unit return type in controller methods #31648
  • Spring Data Redis Cache implementation is not compatible with Cache.retrieve(key) semantics #31637
  • GeneratedFiles#addSourceFile should not allow to add a source in the default package #31628
  • <jee:local-slsb> no longer works with a business-interface attribute #31627
  • Non-blocking @Cacheable method does not support condition with #result #31626
  • PathResourceResolver.getResource() does not log warning if Resource#getURL() throws exception #31623
  • Jackson encoder releases resources in wrong order #30493
  • WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #26536

πŸ“” Documentation

  • Fix links related to Spring WebFlux #31632
  • Extract recurring asciidoc links to attributes #31619
  • Improve STOMP WebSocket documentation for input message buffer size #31616
  • Document support for AppCDS #31497

❀️ Contributors

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

@7fantasy7, @Star-ho, and @quaff

v6.1.0

16 Nov 14:54
Compare
Choose a tag to compare

⭐ New Features

  • When using Oracle, JdbcClient.update(KeyHolder) does not work without explicit key column names #31607
  • Introduce way to convert ClientHttpResponse to desired type #31597
  • Property-driven onRefresh exit for AppCDS purpose #31595
  • No Micrometer traceId in JMS listener container errorHandler #31559
  • Register Hibernate @EmbeddableInstantiators registered on JPA embeddables for reflection #31534
  • Improve method validation support for errors on elements within a container #31530
  • Support pattern matching for method names in ControlFlowPointcut #31435
  • Review reachability metadata contributions after GraalVM changes #31213
  • handleEmptyBody of RequestBodyAdvice should apply also when content-type is not set #30522

🐞 Bug Fixes

  • Regression with @EnableJpaAuditing using Spring Boot 3.2-RC2 in native image #31575
  • Retrieving the response body as a List of POJOs fails with RestClient but passes with WebTestClient #31574
  • ExecutorLifecycleDelegate should call ExecutorService.isTerminated() in ?.isRunning() #31549
  • RestTemplate POST to endpoint using Digest Auth no longer works in 6.1 #31516
  • Code generation for constructor arguments must cast null indexed argument value #31508
  • \n in form model when using Jetty 12 client and multipart/form-data #31361
  • Add status handler to recognize unknown status codes outside of 4xx/5? #31202

πŸ“” Documentation

  • Document how to log @Sql scripts and statements #31589
  • Link to KDoc API documentation from Javadoc overview #31587
  • Fix link in Javadoc of ConfigurableMockMvcBuilder #31542
  • Add note about @[Enabled|Disabled]InNativeImage in reference manual #31438
  • Document @DisabledInAotMode in the reference manual #31437
  • Document @Sql class-level execution phase support in the reference manual #31377
  • Document that Micrometer's "error" tag should be preferred vs. legacy "exception" tag #31514

πŸ”¨ Dependency Upgrades

  • Upgrade to Context Propagation 1.1.0 #31599
  • Upgrade to Kotlin 1.9.20 #31539
  • Upgrade to Micrometer 1.12.0 #31556
  • Upgrade to Reactor 2023.0.0 #31557

❀️ Contributors

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

@Young-Zen, @duesenklipper, @izeye, @k-seth, and @wakingrufus