⭐ New Features
- Make SessionLocaleResolver's attribute name configurable [SPR-15450] #20011
- Add constructor to ShadowingClassLoader to create an instance without default excludes [SPR-15439] #20000
- Improve performance of StringUtils.replace() if pattern is not found [SPR-15430] #19991
- Revise AcceptHeaderLocaleResolver default locale handling [SPR-15426] #19987
- Minimize reflective interaction with annotation instances during retrieval [SPR-15387] #19950
- Spring JDBC not correctly processing Postgresql ?| and ?& operator [SPR-15382] #19945
- Make it easier to see the HTTP headers when debugging MockMvc-based tests [SPR-15375] #19939
- GenericCallMetaDataProvider should not treat 'NULLABLE' column as boolean (for compatibility with latest Postgres driver) [SPR-15333] #19896
- DefaultResponseErrorHandler should have its methods protected [SPR-15329] #19892
- JRubyScriptFactory compatibility with JRuby 9.1.7+ [SPR-15322] #19885
- Support for HtmlUnit 2.25+ [SPR-15319] #19882
- Support for
@Lookup
methods within@Configuration
classes [SPR-15316] #19879 - sockjs heartbeat failure logged at ERROR level [SPR-15307] #19871
- Session-scoped bean should have its state propagated to the HttpSession at the end of its initial request (even without further access) [SPR-15300] #19865
- StandardMultipartFile.transferTo should fall back to manual copy if Part.write doesn't support absolute locations (e.g. on Jetty) [SPR-15257] #19822
- Avoid re-retrieval of
@ResponseStatus
annotation for each request [SPR-15227] #19792
🪲 Bug Fixes
- ApplicationListener potentially invoked twice in circular reference with proxy [SPR-15452] #20013
- When setting spring.freemarker.template-loader-path to an s3 bucket, the SpringTemplateLoader is not selected [SPR-15445] #20006
- AbstractRecursiveAnnotationVisitor can't access a package protected enum value [SPR-15442] #20003
- UnknownHostException not accepted as "resource not found" anymore [SPR-15433] #19994
- ForwardedHeaderFilter.ForwardedHeaderRequestWrapper does not preserve ; [SPR-15428] #19989
- ForwardedHeaderRequestWrapper should return a new StringBuffer instance on each invocation of the getRequestURL method [SPR-15423] #19984
- ForwardedHeaderFilter.ForwardedHeaderRequestWrapper does not preserve encoding of requestURI [SPR-15422] #19983
- UrlResource getFilename should not contain query parameters [SPR-15411] #19974
- SettableListenableFuture setException is inconsistent with callbacks under race [SPR-15409] #19972
- NullPointerException can happen in HttpRequestMethodNotSupportedException.getSupportedHttpMethods() [SPR-15377] #19941
- VersionResourceResolver does not delegate path resolution to the chain [SPR-15372] #19936
- PathMatchingResourcePatternResolver fails to work under Tomcat 8.0.41 with unpackWARs=false [SPR-15332] #19895