Skip to content

Releases: spring-projects/spring-framework

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

v6.0.14

16 Nov 14:30
Compare
Choose a tag to compare

⭐ New Features

  • Provide caching for HandlerMappingIntrospector lookups #31588
  • Log4jLog needs to re-resolve ExtendedLogger on deserialization (for compatibility with Log4J 2.21) #31582
  • Optimize StandardTypeLocator for hotspot when the same classes are resolved #31579
  • Add duplicate key exception error code for SAP HANA database #31554
  • Do not delegate TRACE to HttpServlet on ERROR dispatch #31457
  • Add properties setter to ProblemDetail #31430

🐞 Bug Fixes

  • GeneratedFiles#addSource does not provide proper context if the specified class name is invalid #31612
  • MessageBuilder#createMessage should not define the payload as @Nullable #31610
  • Default Mixin added by Jackson2ObjectMapperBuilder are missing required runtime hints #31606
  • NettyDataBuffer#toByteBuffer fails if readPosition > 0 #31605
  • Avoid duplicate JAR resources in PathMatchingResourcePatternResolver on MS Windows #31598
  • NamedParameterUtils broken parsing related to square brackets #31596
  • Multipart cleanup is done too eagerly #31567
  • Jakarta validation field constraints in superclass are ignored in native image #31552
  • Function column out doesn't resolve to SqlOutParameter #31550
  • Restore support for recursive annotations in Kotlin #31518
  • Resolve to empty MultiValueMap when no matrix variables are provided #31483
  • ProxyFactoryBean declaration may lead to unexpected non-fatal "FactoryBean threw exception from getObjectType" stacktrace output #31473
  • Use of @Value in compact constructor of a record should not register method injection #31433
  • Prevent duplicate HTTP server observations for cancelled exchanges #31417
  • Spring MVC raises MissingPathVariableException resulting in 500 instead of 400 error when path segment is u001F or u00D and cannot be converted to target type UUID #31382
  • Ensure consistent value count in ConcurrentReferenceHashMap#Segment #31373
  • HeaderContentNegotiationStrategy.resolveMediaTypes throws unexpected IllegalArgumentException #31254
  • Session Cookie in Reactive WebSession is not deleted if maxAge is set through cookie initializer (e.g. via Boot application property) #31214
  • DefaultWebClient logs URI without the port number #30519
  • CGLIB BeanCopier falls back to ClassLoader.defineClass for public target #28699
  • BeanUtils.copyProperties() consumes large amount of memory #27246

📔 Documentation

  • RestTemplate initialization documentation in 6.0.x mentions Netty, yet no ClientHttpRequestFactory is present in the package. #31526
  • Correct typo in annotations.adoc #31519
  • Document X-Forwarded-* Headers #31491
  • Improve support and documentation for the "default" bean definition profile name #29071
  • Document that pertypewithin is supported by Spring AOP #25887
  • Document alternatives of using multiple PropertyPlaceholderConfigurers [SPR-9989] #14623

🔨 Dependency Upgrades

  • Upgrade to Micrometer 1.10.13 #31586
  • Upgrade to Reactor 2022.0.13 #31585

❤️ Contributors

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

@CrotchBurnt, @GVictorG7, @PiotrFLEURY, @baratrax, @bernie-schelberg-invicara, @huyachigege, @izeye, @lorenzsimon, @martin-lukas, and @rwinch

v5.3.31

16 Nov 08:43
Compare
Choose a tag to compare

⭐ New Features

  • Log4jLog needs to re-resolve ExtendedLogger on deserialization (for compatibility with Log4J 2.21) #31583

🐞 Bug Fixes

  • MessageBuilder#createMessage should not define the payload as @Nullable #31611
  • Avoid duplicate JAR resources in PathMatchingResourcePatternResolver on MS Windows #31603
  • Spring web integration commons fileupload receives files and other parameter uploads, with a null pointer #31564
  • Function column out doesn't resolve to SqlOutParameter #31560
  • Resolve to empty MultiValueMap when no matrix variables are provided #31484
  • BeanUtils.copyProperties() consumes large amount of memory #31481
  • CGLIB BeanCopier falls back to ClassLoader.defineClass for public target #31436
  • R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #31411
  • HibernateJpaDialect and HibernateExceptionTranslator throw SQLExceptionTranslator-provided exception instead of returning it #31410
  • NamedParameterJdbcTemplate throws unexpected exception for null query #31394
  • LazyResolutionMessage does not implement proper toString #31385
  • Illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #31233

📔 Documentation

  • Clarify documentation for @Transactional on interfaces #31401
  • Default behavior of BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class) inconsistent with code #31349
  • Referencing a @Bean method in a @Configuration class' @PostConstruct method leads to circular reference #31339
  • Incorrect reference information about CGLIB supported method visibility #31311

🔨 Dependency Upgrades

  • Upgrade to Reactor 2020.0.38 #31584

v6.1.0-RC2

26 Oct 12:48
Compare
Choose a tag to compare
v6.1.0-RC2 Pre-release
Pre-release

⭐ New Features

  • Support ContextLoader config in @SpringJUnitConfig and @SpringJUnitWebConfig #31498
  • TypeDescriptor and ResolvableType cache in GenericTypeAwarePropertyDescriptor #31490
  • Consistent Class and array matching in ResolvableType.isAssignableFrom #31487
  • BeanDefinitionRegistryPostProcessor should declare empty default postProcessBeanFactory method #31476
  • Remove support for Protobuf 2.x and protobuf-java-format #31465
  • Refine CRaC restoration logs #31462
  • Allow repeatable writes in StreamingHttpOutputMessage #31449
  • Add support for merging two BeanRegistrationAotContribution instances #31446
  • Kotlin BeanFactory.getBean extension fails with nested generic in context #31439
  • Log warning and skip resource hint registration for classpath location patterns #31429
  • Revisit AOT support for generic constructor argument values #31420
  • Add UriBuilderFactoryArgumentResolver. #31413
  • Add Coroutines support for @Cacheable #31412
  • PartEvent API should support limiting the number of file parts #31343
  • Revise support for quoted identifiers in SimpleJdbcInsert #31208
  • When configuration class parsing fails, provide more information about the class that triggered the failure #31146
  • WebClientResponseException defaults to ISO-8859-1 #31072
  • Introduce @DisabledInAotMode in the TestContext framework #30834
  • Support TypedStringValue during AOT processing #29074
  • Support ETag generation on ResourceHttpRequestHandler #29031
  • Better error reporting for @Bean creating when bean instance has been replaced with an incompatible type #28897
  • Add Coroutines support for @EventListener #28343
  • Support "*" catch-all mappings for MockMvc Filter registrations #28041
  • Guard against ConcurrentModificationException when the response processes commitActions #27587
  • Improve ControlFlowPointcut extensibility #27187
  • Uploading a too-large file should be a 4xx client error, not a 500 Internal Server Error #27170
  • Add special handling of disconnected client errors in ExceptionHandlerExceptionResolver #26181

🐞 Bug Fixes

  • ConstructorResolver rejects a candidate if the parameter value is null #31495
  • 3.2.0-RC1: No primary or single unique constructor found for interface java.util.Set #31488
  • Can't link to Spring Framework 6.1.0 release candidate documentation #31480
  • In MockMvc tests all filters end up with empty-string filterName, breaking OncePerRequestFilter #31474
  • <mvc:annotation-driven> should not instantiate bean property values #31472
  • Graal VM native image: Substitution target for o.s.o.j.v.Target_BytecodeProvider is not loaded #31452
  • JdkClientHttpRequest does not support Content-Length 0 #31451
  • Fix typo in ClassUtils.forName() #31428
  • AOT processing fails to determine proper target for a FactoryBean that produces an array #31426
  • BeanDefinitionPropertyValueCodeGenerator#orderForConsistency expects values to be Comparable #31419
  • Conversion not applied to @RequestParam default value if used for "null after conversion" case #31336
  • HandlerMethodValidationException.Visitor incorrectly triggers other() method instead of requestParam() for @RequestParam validation errors #31329
  • AbstractApplicationContext.refresh() leaves bean resources uncleaned when SmartInitializationSingleton throws a non BeansException #28878

📔 Documentation

  • Document pattern matching support in NameMatchMethodPointcut #31500
  • Fix small typo in javadoc #31455
  • Expand explanation for the "lite" bean approach #29957

🔨 Dependency Upgrades

  • Upgrade to ASM 9.6 #31431
  • Upgrade to Kotlin 1.9.20-RC2 #31494

❤️ Contributors

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

@OlgaMaciaszek, @bdshadow, @funky-eyes, @izeye, @larsgrefer, and @mmoayyed

v6.1.0-RC1

12 Oct 11:05
Compare
Choose a tag to compare
v6.1.0-RC1 Pre-release
Pre-release

⭐ New Features

  • Enforce REQUIRES_NEW for correct transaction configuration on transactional event listeners #31414
  • TestCompiler should allow to configure the Locale that renders compiler messages #31408
  • Consistent Object result declarations for JdbcClient's ResultQuerySpec #31403
  • Move ReactorResourceFactory to org.springframework.http.client package #31399
  • Prevent message resolution after context close #31397
  • Handle STOMP messages to user destination in order #31395
  • AOT bean registrations miss reflection hints on property fields #31390
  • Support Jackson's DatatypeFeature in Jackson2ObjectMapperBuilder #31380
  • Allow Filters to be initialized when they're added to MockMvc #31362
  • Use schema-based config in sql-error-codes.xml #31354
  • Optimize uses of onErrorResume() #31352
  • AOT bean registrations miss reflection hints on interfaces #31350
  • SimpleAsyncTaskScheduler should run fixed-delay tasks on scheduler thread #31334
  • Allow custom observation convention for RestClient #31325
  • MockMvcHttpClientConnector support for RequestPostProcessor hook #31298
  • Expose shouldHandle(ApplicationEvent) in ApplicationListenerMethodAdapter #31295
  • Make ReactorNettyClientRequestFactory lifecycle-aware #31281
  • Add a constructor with externally managed Reactor Netty resources to ReactorNettyClientRequestFactory #31280
  • Consistent CannotAcquireLockException translation for PostgreSQL serialization failure behind JPA #31274
  • Simplify ServerRequestExtensions.queryParamOrNull() #31264
  • Reduce nested class lookups in ClassUtils #31258
  • Print JVM restoration time in DefaultLifecycleProcessor #31252
  • ValueLoaderEntryProcessor should not be created for every call to JCacheCache#get #31250
  • Introduce initialize() method in AbstractRoutingDataSource and AbstractRoutingConnectionFactory #31248
  • Add MappingJackson2MessageConverter constructors that accept an ObjectMapper #31234
  • Eliminate synchronized block to avoid thread pinning in SingletonSupplier #31227
  • Add OuputStream BodyInserter #31184
  • SseEmitter should format a multiline String #30965
  • Suppress logging from HandlerMapping when used for Spring Security's mvcRequestMatcher #30349
  • Lenient handling of unencoded URIs in ForwardedHeaderTransformer #30137
  • Support DispatcherType.INCLUDE in DefaultServletHttpRequestHandler #30113
  • Introduce caching for functional routing #29985
  • Log CglibAopProxy errors as WARN instead of INFO #29773
  • Add CharBufferDecoder #29741
  • Provide the HttpRequest on the ClientResponse interface #28397
  • Batch update return generated keys #28132
  • Allow filters to be registered with MockMvc for particular dispatcher types #27717
  • Introduce class-level execution phases for @Sql #27285
  • Add default methods to MailSender and JavaMailSender as appropriate #23651
  • Remove all ApplicationListenerMethodAdapters on context close [SPR-17456] #21988
  • Handle STOMP messages from client session in order #21798
  • Call Lifecycle.stop() for already started beans on failed refresh [SPR-15468] #20028

🐞 Bug Fixes

  • Fix regression in JmsAccessor#setSessionAcknowledgeMode #31328
  • JdbcClient does not update KeyHolder when using positional parameters #31297
  • AOT bean registrations miss reflection hints on public methods #31293
  • DefaultFetchSpec should not buffer results in temporary list buffers #31282
  • Missing reflection hint on Publisher for bean destroy methods support #31278
  • Missing reflection hint on Eclipse FileLocator #31271
  • Missing resource hint for spring.properties #31270
  • Missing reflection hints on Kotlin classes for KotlinDetector #31269
  • Missing reflection hint on MonetaryAmount in conversion service #31266
  • Missing reflection hints for jakarta.inject classes #31259
  • ResponseBodyEmitter ignores calls to complete but remains open after JSON write error while sending #30687
  • The task in AsyncTaskExecutor throws an exception before execution, and ControllerAdvice will be called twice. #30232
  • Suppress deprecation warning for AOT-generated code that refers to a deprecated member #29597
  • Avoid duplicate ApplicationListener firing (proxy vs. target) #28322
  • JCacheCache#putIfAbsent is not atomic #21591

📔 Documentation

  • Add Search in all Spring Docs #31290
  • Add missing period in RestClient documentation #31237
  • Improve wording in Javadoc for @Autowired #31235
  • Clarify ClientHttpRequestInterceptor#intercept() must close response if it throws exception after receiving the response #29751
  • Create migration guide from RestTemplate to RestClient #23269

🔨 Dependency Upgrades

  • Upgrade to Micrometer 1.12.0-RC1 #31398
  • Upgrade to Reactor 2023.0.0-RC1 #31406

❤️ Contributors

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

@JakobFels, @OnlyWick, @StellarStrategist, @aahlenst, @alidandach, @bergander, @bramhaag, @chaewon121, @ctailor2, @e-freni, @esperar, @ghainesii, @hpoettker, @izeye, @joakimmohn, @kang-hl, @kriegaex, @kzander91, @markusheiden, @mdeinum, @qpakzk, @quaff, @ralph-riedel, @runeflobakk, @rwinch, @sephiroth-j, @shin-mallang, @violetbeach, and @vpavic