⭐ New Features
- Thread-safe removal of destruction callbacks in web scopes #23117
- Guard against ConcurrentModificationExceptions in the systemProperties PropertySource #23063
- OncePerRequestFilter does not work properly on Error Dispatch on Jetty #22989
- SimpleMessageListenerContainer - add possibility to disable manual recovery #22987
- AntPathMatcher#isPattern ignores template variables #22959
- Avoid expensive assertions in web resource resolution #22955
- WebFlux: Mono does not invoke onComplete(), but instead cancel() #22952
- Illegal reflective access on shutdown of ExecutorService #22939
- Illegal reflective access by SpEL ReflectivePropertyAccessor #22242
🪲 Bug Fixes
- Fix MockHttpServletRequest.setCookies to produce single Cookie header #23074
- MappingMediaTypeFileExtensionResolver ConcurrentModificationException #23064
- Weird behaviour when calling
ApplicationContext.getBean()
with a null class reference #23045 - StompSubProtocolHandler does not close the connection after sending an ERROR frame #23039
- WebFlux AbstractView does not allow null model values anymore #23038
- Fix ScriptUtils for MS Windows line ending #23019
- validation error message {0} is not working #23014
- AnnotatedElementUtils.findMergedAnnotation not working for javax annotations (e.g. NotNull) #22957
- WebFlux AbstractView does not update BindingResult for resolved async attributes #22933
- HeaderResultMatchers should not import org.junit.Assert #22932
📔 Documentation
- Reintroduce author list and copyright notice #23049
- spring-mvc.xsd stale-if-error attribute documentation incorrect #22983
- AbstractBeanDefinition.getBeanClass() javadoc misleads about returning null #22960
- Fix typo in package-info.java #22941
❤️ Contributors
We'd like to thank all the contributors who worked on this release!