⭐ New Features
- Align DispatcherServlet bean detection logs #37296
- Extract bean property path support into PropertyPath #37275
- Expose matched PathPattern as MVC request attribute #37272
- Add a configurable limit for maximum nesting depth in property paths #37252
- Enforce "data: " (with space) prefix for outgoing SSE data payloads #37242
- Parse RFC 9651-like date headers #37224
- Polish ScheduledAnnotationBeanPostProcessor to refine null-safety #37219
- Add batch update support to JdbcClient #37216
- Emit multipart parts with empty bodies in PartGenerator #37202
- Upgrade to HtmlUnit 5 #37194
- Ignore invalid SSE retry field #37193
- Handle MIME type parameter names case-insensitively #37192
- Deprecate
SpelParserConfigurationconstructors in favor of the builder API #37190 - When connection to client is lost while writing JSON, it should not be logged as warning #37151
- JMS
SimpleMessageConverter.fromMessage()can returnnulldespite@NullMarkedpackage #37148 - Avoid unnecessary allocations for cached annotation mappings #37141
- Update
MockCookie#parse(String)validation #37136 - Add WebFlux OpenTelemetry observation convention #37131
- Limit bracket depth in
PropertyEditorRegistrySupport'saddStrippedPropertyPaths()#37020 - Improve efficiency of map creation in
DataBinder#37019 - Reject overlapping declared and generated key columns in
SimpleJdbcInsert#37014 - Reject MIME type parameters differing only in case #37008
- Use depth-aware bracket parsing in
PropertyAccessorUtils#36999 - Account for all array objects when checking array size in SpEL #36998
- Align SpEL's default max auto-grow size with Spring data binding #36995
- Avoid redundant registration of Date/Calendar/Long converters in DefaultFormattingConversionService #36951
- Suppress CGLIB validation WARN for lifecycle callbacks #36935
- Add Cache-Control must-understand directive #36918
- validate samesite attribute in ResponseCookie #36905
- Close contexts when clearing test context cache #36825
- Use immutable map for static cache in TypeDescriptor #36813
- Add a configurable limit for structural nesting depth in SpEL expressions #36723
- Simplify programmatic scheduling of cron tasks with time zone #36556
- Deprecate Derby support #36045
- Add support for generating resources linked to a feature #35862
- Add RFC 10008 (QUERY HTTP method) support #34993
🐞 Bug Fixes
- PartGenerator.switchToFile() doesn't count buffered bytes toward maxDiskUsagePerPart #37238
- Reject write methods not starting with "set" in
Property#37139 - Meta-annotations with attributes are still unnecessarily synthesized in
MergedAnnotations#37135 - Use the 4-argument
Propertyconstructor in SpEL'sReflectivePropertyAccessor#37123 - Fix
BeanFactory.getBean(String, ParameterizedTypeReference)to respect AOP proxy #37047 - Fix
OptionalToObjectConverterapplicability check #36913 - Fix
Propertyname resolution for record-style accessors #36911
📔 Documentation
🔨 Dependency Upgrades
- Upgrade to Kotlin 2.4.20 #37271
- Upgrade to Micrometer 1.18.0-M2 and Tracing 1.8.0-M2 #37288
- Upgrade to Reactor 2026.0.0-M2 #37263
❤️ Contributors
Thank you to all the contributors who worked on this release:
@DevJunz, @Eymenonar, @Sineaggi, @Will-thom, @blackdurumi, @cookie-meringue, @desiderantes, @dxbjavid, @froggy0m0, @gregjotau, @heka1024, @junhyeong9812, @junhyung8795, @kilink, @lArtiquel, @marschall, @mateo-maza, @ngocnhan-tran1996, @noojung, @quaff, @sabberworm, @seonwooj0810, @shaggyinsomniac, @verhasi, and @vpavic