⭐ New Features
- Add cpp to mime.types as text/plain [SPR-16678] #21219
- Mixed use BeanNameAutoProxyCreator and AnnotationAwareAspectJAutoProxyCreator to proxy same bean [SPR-16677] #21218
- Comprehensively cache annotated methods for interfaces and superclasses [SPR-16675] #21216
- Reduce ClassUtils.forName overhead (in particular for annotation introspection purposes) [SPR-16667] #21208
- Generate multipart boundary using SecureRandom [SPR-16635] #21176
- When
@DependsOn
throws a NoSuchBeanDefinitionException it should include the dependent bean for clarity [SPR-16628] #21169 - STOMP broker relay only allows up to 15 client connections [SPR-16626] #21167
- Update ContentNegotiationStrategy to never return an empty List [SPR-16624] #21165
- Allow to make FormHttpMessageConverter add the charset in the Content-Type header [SPR-16613] #21154
- ThreadPoolTaskExecutor should cancel all remaining Future handles on shutdown [SPR-16607] #21148
- CodecException: No suitable writer found for part [SPR-16601] #21142
- Consistent volatile access to running flag in Lifecycle implementations [SPR-16596] #21137
- Support for grouped DeferredImportSelector [SPR-16589] #21131
- Support for SimpleEvaluationContext in SpEL [SPR-16588] #21130
- MockMvcResultMatchers.jsonPath(String).value() should have a matching method to declare the expected type [SPR-16587] #21129
- Consider caching interface-derived BeanInfo instances in CachedIntrospectionResults [SPR-16568] #21110
- Support
@ResponseStatus-annotated
exceptions on WebFlux [SPR-16567] #21109 - Overloaded convenience setters on HttpHeaders [SPR-16562] #21104
- Consistent incrementer arrangement for PostgreSQL, DB2 and SAP HANA [SPR-16558] #21101
- Provide simple way to create ClientResponse [SPR-16553] #21096
- Improve docs and handling of send errors in ResponseBodyEmitter [SPR-16548] #21091
- EncoderHttpMessageWriter never sets Content-Length [SPR-16542] #21085
- Jackson Encoder(s) ignore charset in MimeType [SPR-16539] #21082
- Need ability to access URI template in WebClient metrics/tracing instrumentation [SPR-16537] #21080
- DefaultMessageListenerContainer should interrupt worker threads when not returning on shutdown [SPR-16536] #21079
- Support for ResolvableType.getType().getTypeName() on Java 8 [SPR-16535] #21078
- Consistent use of Collection.toArray with zero-sized array argument [SPR-16523] #21066
- Unable to register
@RestControllerAdvice
Class via WebTestClient [SPR-16520] #21063 - Headers adding ability in ACK/NACK frame [SPR-16519] #21062
- SSE writer does not allow customizing the charset [SPR-16516] #21059
- Customize PreparedStatementCreatorFactory in getPreparedStatementCreator [SPR-16050] #20599
- Support BufferingClientHttpRequestFactory in MockRestServiceServer [SPR-14694] #19258
- Add support for asserting JSON in ContentRequestMatchers, just as there is for XML [SPR-13919] #18493
- Spring Websockets Broker relay supporting a cluster of STOMP endpoint addresses [SPR-12452] #17057
🪲 Bug Fixes
- SimpleMailMessage's handling of to/cc/bcc arrays is inconsistent [SPR-16671] #21212
- JndiRmiServiceExporter fails to export service on IBM j9 JDK [SPR-16670] #21211
- Unable to bind a null value for UUID column with PostgreSQL [SPR-16669] #21210
- NamedParameterUtils.parseSqlStatement should parse :{x} style parameter correctly [SPR-16663] #21204
- UriComponentsBuilder Forwarded header parsing can throw java.lang.NumberFormatException [SPR-16660] #21201
- Cannot autowire individual constructor argument in
@Nested
test class [SPR-16653] #21194 - Annotation lookup on parameter in inner class constructor fails when using javac from JDK versions prior to 9 [SPR-16652] #21193
- ServletUriComponentsBuilder should replace context path when X-Forwarded-Prefix is present [SPR-16650] #21191
- Concurrent result may be missed due to a race condition in MockMvc [SPR-16648] #21189
- Multipart Upload with Commons Fileupload on lazy mode downloads data on cleanup [SPR-16640] #21181
- WebClient retrieve() does not handle Void.class as recommended [SPR-16636] #21177
- An error occurs if a blank character exists before and after the delimiter of the MIME type parameter. [SPR-16630] #21171
- Address race condition within spring that causes about-to-be-created-bean exceptions [SPR-16627] #21168
- FactoryBeanRegistrySupport atomicity issues [SPR-16625] #21166
- Consistent thread-safe iteration in DefaultSingletonBeanRegistry [SPR-16620] #21161
- CallMetaDataContext.reconcileParameters doesn't catch output parameters with DatabaseMetaData.procedureColumnResult type (on Postgres) [SPR-16611] #21152
- ResourceDecoder incorrectly matches to Object.class [SPR-16606] #21147
- AcceptHeaderLocaleResolver chooses wrong Locale for language match [SPR-16599] #21140
- WebFlux commitActions are called after status, headers and cookies are set [SPR-16597] #21138
- ServletHttpHandlerAdapter
@WebServlet
annotation attributes do not conform to servlet spec [SPR-16591] #21133 - Inconsistent handling of null values through Java 8 accessors in ConcurrentReferenceHashMap [SPR-16584] #21126
- RestTemplate with HttpComponentsClientHttpRequestFactory and no buffering with an interceptor throws UnsupportedOperationException [SPR-16582] #21124
- URIEditor should not double escape classpath: URIs [SPR-16581] #21123
- SimpleAliasRegistry registerAlias not atomic [SPR-16577] #21119
- TransactionTemplate inherits equals()/hashCode() from DefaultTransactionDefinition [SPR-16572] #21114
- WebAsyncManager concurrentResult should be volatile [SPR-16571] #21113
- Inconsistent synchronization in AbstractBeanFactoryBasedTargetSource and JdbcAccessor [SPR-16570] #21112
- Reading annotations in ConfigurationClassParser does not fall back to ASM on Google App Engine [SPR-16564] #21106
- Missing PersistenceException cause message in refresh failure warn log [SPR-16559] #21102
- PostgresTableMetaDataProvider.isGetGeneratedKeysSimulated() does not detect Postgres 10 [SPR-16556] #21099
- ChannelSendOperator.WriteBarrier readyToWrite has race condition [SPR-16555] #21098
- HiddenHttpMethodFilter breaks HandlerFunction with BodyExtractors.toFormData [SPR-16551] #21094
- FilePart transferTo fails with java.nio.file.NoSuchFileException [SPR-16546] #21089
- StackOverflowError when using WebFlux multipart file data handler with Undertow [SPR-16545] #21088
- SpEL : Indexed access within an expression with null variables is no longer a SpelEvaluationException [SPR-16544] #21087
- WebApplicationContextFacesELResolver#isReadOnly always return false [SPR-16543] #21086
- testBindInstantFromJavaUtilDate fails on systems in the Pacific/Auckland time zone [SPR-16534] #21077
- GsonHttpMessageConverter cannot be used in an SseEmitter because it closes the response stream [SPR-16529] #21072
- Spurious ERROR-level logging when using SSEEmitter [SPR-16528] #21071
- StringIndexOutOfBoundsException when rewriting links in CSS resources [SPR-16526] #21069
- [Reactor Netty] Incorrect error level logging for client bad request [SPR-16524] #21067
- JSON with missing quote leads to hanging [SPR-16521] #21064
- EL1072E when evaluating compiled null-safe expression [SPR-16489] #21032
- Deadlock in SubProtocolWebSocketHandler on shutdown with Undertow [SPR-16488] #21031
- Precondition failed for PUT methods on ResponseEntity return types [SPR-15780] #20335
📔 Documentation
- [docs] disarranged table in section View Technologies / Freemarker [SPR-16612] #21153
- Doc:
@Scope
not inherited from base class [SPR-16602] #21143 - Document that
@PropertySource
and@TestPropertySource
do not support YAML [SPR-16563] #21105 - Incorrect description for class-level
@Transactional
with AspectJ [SPR-16552] #21095 - Incorrect pointcut expressions in reference documentation [SPR-16549] #21092
- [docs] Restructure chapter Functional Endpoints chpater [SPR-16547] #21090
- [docs] Document threading model in Spring WebFlux [SPR-16538] #21081
- [docs] Add WebFlux content on exception handling [SPR-16394] #20940