⭐ 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()
inCommonAnnotationBeanPostProcessor
#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 ingetRejectedValue
ifValueExtractor
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 anIllegalStateException
#32003 - [spring-tx] Unable to override prepareSynchronization of AbstractPlatformTransactionManager from v6.1.0 #32000
RestClientResponseException
handlesresponseHeaders
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 supportUnit?
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 andBindingResult
target inMethodValidationAdapter
#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
andRestTemplate
#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 mentionParameterNamesModule
registration #31959 - Fix typo in kotlin.adoc #31958
- Fix references to "application/*+xml" in Javadoc #31951
- Update outdated elements in Kotlin reference documentation #31943
- Update
autowired-qualifiers.adoc
to refer the-parameters
Java compiler flag #31939 - Fix Kotlin example for simpler SELECT variant using IN #31932
- Fix usage of WebClientAdapter in reference documentation #31917
- With virtual threads enabled, separate fixed-delay tasks cannot run concurrently #31900
- Fix formatting in scheduling.adoc #31899
- Specify use of regexp Path Pattern in javadoc #31886
- Improve the documentation and discoverability of
CoWebFilter
#31877 - Add Javadoc for MockHttpServletResponse getContentLength method #31833
- Revisit JdbcClient/JdbcTemplate javadoc for operations that take a KeyHolder #31486
- Document that CGLIB cannot proxy package private methods declared in a superclass is in a different package #28973
- Doc: ConfigurationClassParser's property source composition requires distinct (Resource)PropertySources names #28886
- Provide guidelines in AspectJ documentation to avoid dumps #27650
- Document autowiring of ServletRequest and other scoped proxy beans provided by WebApplicationContext #26201
- Clarify assisted constructor injection through getBean call with provided arguments #24955
- Document behaviour of
@Transactional
in reactive environments with non-reactive signatures #23277 - Thread-safety and visibility issues not documented [SPR-4307] #8986
🔨 Dependency Upgrades
- Early support for Java 23 #31929
- Upgrade to Kotlin 1.9.22 #31971
- Upgrade to Micrometer 1.12.2 #31996
- Upgrade to Reactor 2023.0.2 #31995
❤️ Contributors
Thank you to all the contributors who worked on this release:
@0x1306e6d, @Drezir, @FBibonne, @JuHyun419, @OlgaMaciaszek, @SuhasBk, @T45K, @Yaklede, @aaronrosser, @achhibi, @bohub12, @dodie, @dogglezz, @izeye, @janjouketjalsma, @kzander91, @leonchen83, @pri88yank, @quaff, @scordio, @slovenlyimp, and @wfouche