⭐ New Features
- ResourceUrlEncodingFilter versioning breaks when URL contains fragment [SPR-17535] #22067
- ReactorNettyTcpClient constructor with callback to initialize TcpClient [SPR-17523] #22055
- WebTestClient.BodySpec.isEmpty() returns false on byte[0] [SPR-17522] #22054
- Expose mapped handler as request attribute in spring-webmvc [SPR-17518] #22050
- Use of Hooks.onOperatorDebug causes performance degradation on 404 errors [SPR-17475] #22007
- The onstatus method of webclient causes a memory leak. [SPR-17473] #22005
- MediaType.parseMediaTypes fails if the input contains a comma [SPR-17459] #21991
- Improve output from logging the map of request mappings [SPR-17450] #21982
- Add abstract base classes for Encoder/Decoder [SPR-17449] #21981
- StandardEvaluationContext does not support concurrent variable access [SPR-17448] #21980
- Support list in IN clause in NamedParameterJdbcTemplate.batchUpdate [SPR-17402] #21935
- Ability to customize Jaxb Marshaller in Jaxb2XmlEncoder [SPR-17388] #21921
- Null response status in WebFilter after controller method [SPR-17368] #21901
- Add RequestPredicate Visitor to WebFlux.fn [SPR-17322] #21856
- Custom web input exceptions in WebFlux [SPR-17232] #21765
🪲 Bug Fixes
- MethodParameter.findParameterIndex() is not thread-safe [SPR-17534] #22066
- Parameter resolution in SpringExtension is not thread-safe [SPR-17533] #22065
- CachingMetadataReaderFactory does not release shared resource cache after context refresh [SPR-17527] #22059
- ForwardedHeaderTransformer double encodes [SPR-17525] #22057
- getBeanNamesForType(ResolvableType) doesn't work for raw singleton instance from
@Bean
method with generic return type [SPR-17524] #22056 - Reserializing a lenient fallback DefaultListableBeanFactory causes an error [SPR-17508] #22040
- HTTP GET from Chrome with WebFlux Rest Controller never completes [SPR-17506] #22038
- Remove Content-Length response header before delegating to WebExceptionHandlers [SPR-17502] #22034
- Illegal reflective access operation warning for toString() on CGLIB proxies [SPR-17500] #22032
- FastByteArrayInputStream.read() wrong return value [SPR-17492] #22024
- Jackson2ObjectMapperBuilder visibilities need to be applied in order [SPR-17489] #22021
- NPE in ClientRequest.attribute(name) when accessing null value [SPR-17486] #22018
- WebClient throws "Only one connection receive subscriber allowed" when response has content but no Content-Type header [SPR-17482] #22014
- NamedParameterJdbcTemplate batchUpdate returns an array of size 1 when the batchArgs passed is an empty array [SPR-17476] #22008
- Type annotations and generic types causing ArrayIndexOutOfBoundsException [SPR-17467] #21999
- WebClient's UriBuilder option should encode path parameters passed into build [SPR-17465] #21997
- Aliases in parameter annotations on a controller interface are not evaluated [SPR-17460] #21992
- ClassUtils.forName fails to load class from ContextTypeMatchClassLoader [SPR-17452] #21984
- ConcurrentModificationException in DispatcherServlet with asynchronous ApplicationEventMulticaster [SPR-17442] #21974
- RestTemplate does not throw exception for custom error codes [SPR-17439] #21971
- ProtobufDecoder assumes number of bytes in delimited format will not be split into chunks [SPR-17429] #21962
📔 Documentation
- Misleading alias definition example in reference documentation, part 1.3.1 [SPR-17536] #22068
- [Docs]: How to customize WebSocket server config with STOMP over WebSocket [SPR-17514] #22046
- Improve visibility of GitHub wiki [SPR-17469] #22001
- Documentation on
@Async
is confusing and biased to XML [SPR-17458] #21990 - Error in Lifecycle Callbacks section [SPR-17453] #21985