⭐ New Features
- HttpHeaders.setContentDispositionFormData should ignore empty filename #25769
- StringDecoder does not provide a way to configure the default charset #25762
- MimeMessageHelper.addAttachment: configurable encoding of attachment filename #25755
- Current log level not checked by LogAccessor supplier-enabled logging methods #25741
- PropertiesLoaderSupport should ignore socket/connect exceptions as well #25717
- Avoid repeated calls to getPathWithinApplication from UrlPathHelper.getLookupPathForRequest #25669
- Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25667
- XStreamMarshaller should avoid direct use of CompositeClassLoader which is not exported by XStream in OSGi #25662
- Avoid LinkedList performance issues through use of ArrayDeque #25652
- Introduce createContext() factory method in AbstractGenericContextLoader #25600
- Declare MessagePostProcessor as a
@FunctionalInterface
#25571 - Assert preconditions for MergedAnnotations.from() factory methods #25568
- Provide access to AbstractRoutingDataSource's resolved target DataSources #25544
- Possible optimization in UrlResource #25531
- Refine use of substring operations #25445
- Cache abstraction does not log hit / miss for synchronized access #25248
🪲 Bug Fixes
- Issue with Forwarded Header and Multiple Values #25737
- CallMetaDataContext.reconcileParameters overwrites cursor name #25707
- VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25706
- SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25681
- Make "org.springframework.util.unit.DataSize" class Serializable #25675
- Joda-Time presence check fails to detect Joda-Time 2.x specifically #25655
- Regression in SimpleThreadScope introduced in 5.2.7 #25618
- Potential integer overflow in ExecutorConfigurationSupport.setAwaitTerminationSeconds(int) and AbstractResourceBasedMessageSource.setCacheSeconds(int) #25613
- Remove session on 4xx response from WebSocket handshake #25608
- spring-jdbc don't set out parameter name from metadata for Postgresql function after issue#25399 #25588
- FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25584
- Lazy dependency proxy does not populate bean dependencies #25562
- Bean creation fails with StackOverflowError after upgrading from 5.1.13 to 5.2.7 #25546
- StaticListableBeanFactory.isSingleton() returns false for singleton beans #25522
- Standalone MockMvc ignores
@RestControllerAdvice
annotation attributes #25520 - MockHttpServletResponse reset() does not reset charset field #25501
- AnnotationTypeMappings does not filter repeatable annotations #25483
- Wrong error message for type mismatch in jsonPath().value() #25480
- Fix infinite loop bug in AnnotationScanner #25429
- Overloaded
@Bean
method with name mismatch causes bean to be created twice (in case of ASM processing) #25263
📔 Documentation
- Prevent confusion about build(boolean) method in UriComponentsBuilder #25604
- Document how to specify Jackson JSON view serialization hints with
@RestController
and Webflux #25596 - Inconsistent log level in
@Bean
javadoc and ConfigurationClassEnhancer #25590 - Fix asciidoctor syntax for source #25539
- Improve Javadoc for
@RequestMapping
#params #25482 - Document that SimpleCacheManager requires caches to be initialized when not used as a bean #22988
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR12 #25730
❤️ Contributors
We'd like to thank all the contributors who worked on this release!