Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
5.0 GA Release
⭐ New Features
- Support autowiring by constructor in Kotlin bean DSL [SPR-16014] #20563
- WebFlux support for HttpHeaders controller method return value [SPR-16006] #20555
- Lambda-based consumption of an ObjectProvider's object when available [SPR-16001] #20550
- WebFlux support for Locale, TimeZone, ZoneId controller method arguments [SPR-15998] #20547
- WebFlux support for UriBuilder, UriComponentsBuilder controller method arguments [SPR-15997] #20546
- WebFlux support for HTTP HEAD [SPR-15994] #20543
- Revisit how WebClient disposes connection [SPR-15993] #20542
- WebSession provide invalidate method [SPR-15960] #20512
- Allow Consumer-style access to FluxExchangeResult within chain of calls [SPR-15959] #20511
- Introduce ForwardedHeaderFilter for WebFlux [SPR-15954] #20506
- Provide an API for introspection of handler mappings [SPR-15934] #20488
- Log message for a composed router function contains no information about the mappings or their handlers [SPR-15933] #20487
- ReactorServerHttpRequest.getUri() does not include scheme [SPR-15931] #20485
- Revisit handling of missing fields (without default values) for immutable data classes [SPR-15877] #20432
- Get a description of all registered routes in a RouterFunction [SPR-15711] #20268
- Stable module names for Spring Framework jars on JDK 9 module path [SPR-13716] #18289
🪲 Bug Fixes
- Delegating File downloads sends incomplete chunks [SPR-15949] #22194
- Fix behavior of ClientResponse bodyToMono and bodyToFlux with Void.class [SPR-16018] #20567
- AutowiredAnnotationBeanPostProcessor picks "wrong" constructor for Kotlin class [SPR-16012] #20561
- Support non-standard classes in Kotlin reflection discovery methods [SPR-15999] #20548
- WebFlux support for HTTP OPTIONS not working [SPR-15995] #20544
- DispatcherHandler no longer orders HandlerMapping beans [SPR-15991] #20541
- PathMatchingResourcePatternResolver provides duplicate resources when using classpath* prefix combined with ant-style [SPR-15989] #20539
- ProtobufHttpMessageConverter: JSON not written to response [SPR-15988] #20538
- RestTemplate doesn't consistently tolerate unknown HTTP status codes [SPR-15978] #20529
- "Parameter metadata not available for the given statement" SQL Exception after upgrading to Spring 5.0 RC4 [SPR-15977] #20528
- ChannelRegistration.setInterceptors is misnamed [SPR-15976] #20527
- AbstractJackson2Decoder breaks Custom Deserializers [SPR-15975] #20526
- DataBuffer Should Release Manually when Exception Thrown [SPR-15966] #20518
- JmsMessagingTemplate is not correctly configured [SPR-15965] #20517
- InMemoryWebSessionStore Leaks Memory [SPR-15963] #20515
- TaskExecutorRegistration.getTaskExecutor() overrides executor properties of a provided ThreadPoolTaskExecutor [SPR-15962] #20514
- spring-jcl does not include exported packages of java commons logging [SPR-15957] #20509
- HttpEntityMethodProcessor discards headers [SPR-15952] #20504
- WebClient: DELETE request should not send transfer-encoding: chunked header [SPR-15947] #20500
- WebClient doesn't send error signal for error responses [SPR-15946] #20499
- only one MultipartFile object populated when using an java.util.Optional MutipartFile array or list
@RequestParam
[SPR-15919] #20473 - java.util.Optional MultipartFile[]
@RequestParam
argument is null in multipart/form-data POST [SPR-15918] #20472 - Request params Optional<List and List are inconsistent [SPR-15676] #20235
📔 Documentation
5.0 RC4 Release
⭐ New Features
- Provide hierarchy traversal support for getBeanNamesForAnnotation [SPR-15923] #20477
- Ensure that WebClient disposes the HTTP client connection once the client response is consumed [SPR-15920] #20474
- Introduce header-based WebSessionIdResolver [SPR-15917] #20471
- WebClient - add option to disable chunked transfer [SPR-15914] #20468
- Enable by default HTTP compression support in Reactor WebClient [SPR-15908] #20462
- WebFlux
@MVC
Controllers do not support@SessionAttributes
. (plus SessionStatus) [SPR-15887] #20442 - Provide hook in DefaultWebSessionManager to support creating custom WebSession implementation [SPR-15876] #20431
- Immutable object constructor arguments not considering WebDataBinder's FIELD_MARKER_PREFIX [SPR-15871] #20426
- Add support for Kotlin autowired constructor with optional parameters [SPR-15847] #20402
- BeanDefinitionBuilder method arguments not annotated with
@Nullable
[SPR-15841] #20396 - MockMvc doesn't honor params in RequestMapping when no equal sign [SPR-15831] #20386
- Autowire contract is not honored in cases where FactoryBean or
@Bean
return null [SPR-15829] #20384 - WebClientException should allow access to status code of the response [SPR-15824] #20379
- URI variables with MockRestRequestMatchers's requestTo [SPR-15819] #20374
- Use ParameterizedTypeReference instead of Class in Kotlin extensions [SPR-15818] #20373
- Add ParameterizedTypeReference method variants to ServerRequest/ServerResponse [SPR-15817] #20372
- Avoid requiring it lambda parameter in Kotlin bean DSL [SPR-15815] #20370
- Media type fails to match types with multiple '+' characters [SPR-15795] #20350
- Support range requests for Spring MVC request mapped methods that return a Resource [SPR-15789] #20344
- ExchangeFilterFunctions Explicit Model For Basic Authentication Credentials [SPR-15764] #20319
- BindingResult support for constructor argument mismatch on immutable data object [SPR-15542] #20101
- Leveraging kotlin-reflect to determine interface method parameters [SPR-15541] #20100
- Consistent overriding for all variants of init/destroy method inheritance [SPR-15532] #20091
🪲 Bug Fixes
- spring-framework-bom lists unpublished spring-build-src module [SPR-15932] #20486
- WebFlux incorrectly falls back to application/json for method that produces application/octet-stream and returns ResponseEntity [SPR-15910] #20464
- ExceptionHandlerMethodResolver loses all handler methods [SPR-15907] #20461
- no dependencyManagement in spring-framework-bom [SPR-15890] #20445
- DefaultWebSessionManager requires DefaultWebSession [SPR-15875] #20430
- Fix overridden methods nullability [SPR-15869] #20424
- Jackson2JsonEncoder and Jackson2JsonDecoder should use provided mime types [SPR-15866] #20421
- Reactive GET request query-params are not decoded correctly. + sign must be space. [SPR-15860] #20415
- Kotlin bean instantiation regression with default declared constructor [SPR-15851] #20406
- FileSystemUtils.deleteRecursively always returns false [SPR-15846] #20401
- FileSystemUtils.copyRecursively no longer replaces existing files [SPR-15845] #20400
- SpringValidatorAdapter fails to retrieve value for Bean Validation 2.0's "" literal [SPR-15839] #20394
- Regression after URI template support added to MockMvcResultMatchers [SPR-15834] #20389
- AnnotationAwareOrderComparator doesn't handle null values anymore [SPR-15823] #20378
- Setting user header on CONNECT message stopped working [SPR-15822] #20377
- [Kotlin] Warning message about private final methods. [SPR-15820] #20375
- AbstractCodecConfigurer creates Jackson Encoders/Decoders each time when getters are called [SPR-15816] #20371
- TemplateAwareExpressionParser.parseExpression does not accept null ParserContext anymore [SPR-15810] #20365
- WebClient.post() not sending complete Flux on Windows [SPR-15790] #20345
- High percent of failures (timeout) under load from server-side WebClient requests [SPR-15584] #20143
📔 Documentation
4.3.11 Release
⭐ New Features
@Lazy
collection of optional elements should not crash when no candidates are found [SPR-15858] #20413- WebAsyncManager should cancel task thread on timeout [SPR-15852] #20407
- Consistent logging in Environment and PropertySource implementations [SPR-15825] #20380
🪲 Bug Fixes
- StompDecoder Logs Null Session IDs for Heartbeats [SPR-15937] #20491
- Error on type argument constraint validation failure [SPR-15916] #20470
- StringIndexOutOfBoundsException from RestTemplate.doExecute IOException handler when query string is empty [SPR-15900] #20454
- SimpleAsyncTaskExecutor not respect ConcurrencyThrottleSupport.NO_CONCURRENCY limit [SPR-15895] #20449
- Should call getNativeResponse() instead of getNativeRequest() in FrameworkServlet [SPR-15867] #20422
- Unable to use Hibernate Validator 4.3.2 if Bean Validation API 1.1 is on the classpath [SPR-15856] #20411
- SimpleApplicationEventMulticaster does not deal with lambda-defined listeners when ErrorHandler is set [SPR-15838] #20393
- spring-aspects should remain on AspectJ 1.8.9 by default (since aspectjrt 1.8.10 requires Java 7+) [SPR-15836] #20391
- Parameter values are null when making a PUT request [SPR-15828] #20383
- Follow-up: AbstractMethodError when calling validated method of MethodValidationPostProcessor is using a
@Lazy
validator [SPR-15807] #20362 - Logs fill with broken pipe when using SockJS [SPR-15802] #20357
- Invalid WARN when returning a BeanDefinitionRegistryPostProcessor from within a
@Configuration
class [SPR-14603] #19172
5.0 RC3 Release
⭐ New Features
- Disable DTD and external entities support in XmlEventDecoder to prevent XXE and XML bomb attack [SPR-15797] #20352
- Avoid silent default to http://localhost:80 in ReactorHttpClientConnector [SPR-15782] #20337
- Use AsynchronousFileChannel + DataBufferUtils in WebFlux resource resolver/transformer chain [SPR-15773] #20328
- Provide convenience method for applying WebTestClientConfigurer [SPR-15770] #20325
- Improve handling of requests with an empty body and no content type to match Spring MVC [SPR-15758] #20313
- Introduce Kotlin Functional bean registration DSL [SPR-15755] #20310
- Improve performance of ReactiveAdapterRegistry [SPR-15747] #20303
- Add apply method to WebClient.Builder [SPR-15743] #20299
- add Mediatype for Nottingham Problem [SPR-15742] #20298
- Jackson2JsonEncoder should stream custom streaming types [SPR-15727] #20283
- Add write methods to DataBufferUtils [SPR-15726] #20282
- Add BodyToMono and BodyToFlux overrides that receive ParameterizedTypeReference [SPR-15725] #20281
- Convenience API for custom error handling on WebClient [SPR-15724] #20280
- Update getAttribute on ServerWebExchange and WebSession to align with Map getOrDefault [SPR-15718] #20274
- Cookie Support for Webflux Functional API [SPR-15715] #20271
- improve logging of DefaultCorsProcessor for rejected headers [SPR-15708] #20265
- AsyncHandlerInterceptor doesn't have a default method [SPR-15702] #20259
- Allow CompletableFuture creation via ListenableFuture [SPR-15696] #20255
- Avoid requiring uri("") when using Web(Test)Client baseUrl [SPR-15695] #20254
- Simplify applying a strategy to requests from WebTestClient and WebTestClient [SPR-15691] #20250
- Allow WebClientBuilder.Builder to be cloned [SPR-15690] #20249
- Align codec configuration in ExchangeStrategies.Builder and WebFluxConfigurer [SPR-15682] #20241
- Provide hook for framework customizations of the WebTestClient MockServerSpec [SPR-15674] #20233
- Kotlin class instantiation with optional parameters and default values [SPR-15673] #20232
- Option to combine typed PathPattern + PathPattern in PathPattern [SPR-15663] #20222
- Log a warning in Jackson builder when Kotlin is used without jackson-module-kotlin [SPR-15658] #20217
- Ordering of WebClient.filter(s) [SPR-15657] #20216
- [doc] Document urlDecode=false implies alwaysUseFullPath=true [SPR-15643] #20202
- Ordering support in InterceptorRegistration [SPR-15620] #20179
- Handle onError events that are sent by the servlet containers [SPR-15614] #20173
- First class WebSession change id support [SPR-15571] #20130
- Add CORS support for functional style routes for WebFlux [SPR-15567] #20126
- Expose mapped handler as an exchange attribute [SPR-15564] #20123
- Add Jackson Smile support to WebFlux [SPR-15424] #19985
- StandardMultipartHttpServletRequest cannot decode multipart Content-Disposition header encoded by FormHttpMessageConverter [SPR-15205] #19769
- Support ScriptEngine#eval(String, Bindings) in ScriptTemplateView [SPR-15115] #19682
- Fallback to defaultContentType if nothing more specific and producible has been specified in request [SPR-11114] #15740
🪲 Bug Fixes
- Parse error when reading JSON through the Jackson non-blocking parser [SPR-15803] #20358
- Support IPv6 Host addresses in HttpHeaders [SPR-15799] #20354
- WebClient fails on empty JSON array response [SPR-15794] #20349
- Returning ResponseEntity from WebFlux controller method declared to return Object serialises entire response entity to response body [SPR-15785] #20340
- WebClient completes abruptly emitting null [SPR-15784] #20339
- WiretapConnector does not clean up exchanges [SPR-15744] #20300
- Issue with ServerRequest's queryParams [SPR-15740] #20296
- ResponseSpec#toEntity(...) fails when response status code is 5xx [SPR-15739] #20295
- WebFlux can't serialize "Object" return types as response body [SPR-15731] #20287
- org.apache.tomcat.websocket.WsSession.requestUri can be null [SPR-15721] #20277
- XmlEventDecoder triggers IllegalReferenceCountException at AbstractByteBuf [SPR-15707] #20264
- Default Locale not set on Spring Webflux [SPR-15705] #20262
- Exception Handler methods do not receive the original exception as argument [SPR-15701] #20258
- ClientResponse bodyToFlux fails when encoding empty JSON array [SPR-15685] #20244
- WebClient's handling of empty bodies seems broken [SPR-15679] #20238
- Inconsistent
@Nullable
on AbstractDestinationResolvingMessagingTemplate [SPR-15670] #20229 - Disable Servlet request async timeout for reactive type streaming scenarios in Spring MVC [SPR-15669] #20228
- ServerHttpRequest getURI doesn't return the port the application is running on [SPR-15084] #19650
4.3.10 Release
⭐ New Features
- Ignore (Auto)Closeable for interface-based proxy decision [SPR-15779] #20334
- Bean factory method collision with configuration class name gives unclear error message [SPR-15775] #20330
- CustomizableTraceInterceptor should allow INVOCATION_TIME placeholder in setExceptionMessage and make stack trace logging configurable [SPR-15763] #20318
- LinkedCaseInsensitiveMap cannot access locale from subclass [SPR-15752] #20307
- ForwardedHeaderFilter should expose option for not converting relative redirects to absolute ones [SPR-15717] #20273
- AbstractValueAdaptingCache does not allow for flexible null value serialization [SPR-15693] #20252
- Fine-tune HTTP/RMI Invoker exception handling [SPR-15684] #20243
- Support CachingHttpAsyncClient from httpasyncclient-cache in HttpComponentsAsyncClientHttpRequestFactory [SPR-15664] #20223
- Cron expression validation method in CronSequenceGenerator improved [SPR-15604] #20163
- Upgrade to Objenesis 2.6 for Google App Engine Standard on Java 8 and for better JDK 9 support [SPR-15600] #20159
🪲 Bug Fixes
- UriUtils.extractFileExtension() does not properly handle all fragments [SPR-15786] #20341
- PropertyOrFieldReference invalidly reuses cached PropertyAccessor [SPR-15769] #20324
- ClassCastException during deserialization of ScopedObject [SPR-15766] #20321
- AbstractJackson2HttpMessageConverter throws exception if log level is ERROR [SPR-15760] #20315
- ReflectionTestUtils accidentally requires spring-aop on the classpath [SPR-15757] #20312
- MockMvc duplicates PUT Parameter value [SPR-15753] #20308
- JSP tags doesn't pick up JSTL-defined time zone at page level [SPR-15746] #20302
- JMS Integration with Tibco causes deadlock while using DefaultMessageListenerContainer [SPR-15738] #20294
- Memory Leak due to not pruning factoryBeanObjectCache when closing the ApplicationContext [SPR-15722] #20278
- WebAsyncManager is not compatible with the crosscontext mode [SPR-15709] #20266
- Netty4ClientHttpRequest does not include port along with host [SPR-15706] #20263
@EventListener
's 'condition' doesn't work as expected with proxied beans [SPR-15678] #20237- SimpleRequestExpectationManager fails with sequential calls with different count [SPR-15672] #20231
5.0 RC2 Release
⭐ New Features
- Expose structured request path from ServerHttpRequest in WebFlux [SPR-15648] #20207
- add EditorConfig file, help to unified code style [SPR-15644] #20203
- Use undecoded path for request mapping in WebFlux [SPR-15640] #20199
- Favor query parameters for content negotiation in WebFlux [SPR-15639] #20198
- Use lambda to refact the code [SPR-15637] #20196
- Replace ResolvableType with ParameterizedTypeReference in WebFlux APIs used in applications [SPR-15636] #20195
- ClientRequest needs way to set header, overriding current values [SPR-15635] #20194
- Refact iterator of Map with Java8's Map.forEach [SPR-15631] #20190
- Use the diamond syntax, remove the type declarations [SPR-15628] #20187
- Use Map.forEach instead of Map.entrySet().forEach [SPR-15627] #20186
- Provide support for Kotlin KClasses in WebTestClient API [SPR-15622] #20181
- Make SystemEnvironmentPropertySource.resolvePropertyName protected [SPR-15617] #20176
- UriUtils.encode* methods needs to use Charset instance. [SPR-15613] #20172
- Replace ParsingPathMatcher with PathPattern registry [SPR-15608] #20167
- Improve support for 0...n UnaryOperator to ExchangeMutatorWebFilter [SPR-15599] #20158
- GenericMessagingTemplate - add overloaded doReceive() for dynamic receiveTimeout [SPR-15591] #20150
- Provide access to the unexpanded URI template when using WebTestClient [SPR-15589] #20148
- Add support to WebTestClient for consuming the ExchangeResult [SPR-15587] #20146
- Need to adjust code in Spring Framework to allow compilation by Eclipse 4.7 compiler [SPR-15586] #20145
- HandlerStrategies should use Lists instead of Streams [SPR-15578] #20137
- Support missing properties from Content-Disposition spec [SPR-15555] #20114
- Add ability to get the Principal to RouterFunctions [SPR-15552] #20111
- ProtobufHttpMessageConverter: Make JSON format configurable [SPR-15550] #20109
- RestTemplate is missing "Typed" error handler. [SPR-15544] #20103
- Introduce null-safety of Spring Framework API [SPR-15540] #20099
- Consider reordering of RequestUpgradeStrategy detection in HandshakeWebSocketService [SPR-15539] #20098
- Revisit DispatcherHandler integration for RouterFunctions [SPR-15536] #20095
- Simplify adding ResponseCookie to ServerHttpResponse [SPR-15523] #20082
- Update Cookie headers in MockServerHttpRequest and Response [SPR-15522] #20081
- Defer logic in DefaultWebFilter.filter [SPR-15520] #20079
- Support WebFilter in RouterFunctions.toHttpHandler [SPR-15518] #20077
- Consider making DefaultWebFilterChain not change state [SPR-15517] #20076
- RequestPartMethodArgumentResolver in WebFlux does not support decoding (e.g. to JSON) the content of a part [SPR-15515] #20074
- Make it possible to pass method and URL to ResponseErrorHandler [SPR-15511] #20070
- Consider Renaming request-id [SPR-15501] #20060
- Parse request path only once during routing [SPR-15397] #19960
- Introduce a LocaleContextResolver abstraction in WebFlux [SPR-15036] #19602
- spring.ftl doesn't work on freemarker 2.3.24+'s auto escaping feature [SPR-14740] #19306
🪲 Bug Fixes
- JdkDynamicAopProxy constructs ReflectiveMethodInvocation with EmptyTargetSource.EMPTY_TARGET for static methods [SPR-15651] #20210
- Dramatic performance degradation on writing to DefaultDataBuffer after filling the initial capacity [SPR-15647] #20206
- NPE in AnnotationUtils.getValue [SPR-15642] #20201
- Protect DataSourceUtils#getConnection(DataSource) against null from DataSource [SPR-15641] #20200
- Spring Webflux: ServerRequest.queryParam() throws NullPointerException for a query parameter without "=" [SPR-15609] #20168
- Spring WebFlux fails with 500 if Accept-Language is set to an empty string [SPR-15603] #20162
- PathPattern "/{foo}.*" should be more specific than "/{foo}" [SPR-15597] #20156
- Make more obvious when WebTestClient exchangeMutator will not work [SPR-15570] #20129
- DDoS Spring 5 RouterFunction apps [SPR-15560] #20119
- {*...} pattern does not work on handler method [SPR-15558] #20117
- webflux handler fails in case invalid method was requested [SPR-15545] #20104
- When using ParsingPathMatcher in MVC user should not have to also explicitly set suffix matching [SPR-15303] #19868
- Spring WebFlux doesn't handle redirect: directives when media type is requested [SPR-15291] #19857
4.3.9 Release
⭐ New Features
- ForwardedHeaderFilter should provide option to "remove" forwarded headers without using them [SPR-15610] #20169
- Optimize DefaultUserDestinationResolver.resolveDestination() [SPR-15602] #20161
- Inefficient use of keySet operators in messaging classes [SPR-15553] #20112
- Increase log level in ExceptionWebSocketHandlerDecorator [SPR-15537] #20096
- UriComponentsBuilder's fromHttpRequest uses server port as host port when handling the Forwarded header [SPR-15504] #20063
- Also clear SerializableTypeWrapper when ResolvableType cache is cleared [SPR-15503] #20062
- Defer StringHttpMessageConverter Charset.availableCharsets() call [SPR-15502] #20061
- Allow for HttpOnly cookie result matcher [SPR-15488] #20048
- Add getTargetCache to TransactionAwareCacheDecorator [SPR-15479] #20039
- Optimize AntPathMatcher when checking for potential matches [SPR-15477] #20037
- Lazily initialize Environment in GenericFilterBean (aligned with HttpServletBean) [SPR-15469] #20029
- Honor
@Autowired
(required=false) at parameter level, as an alternative to java.util.Optional [SPR-15268] #19833
🪲 Bug Fixes
- AbstractMethodError when calling validated method of MethodValidationPostProcessor is using a
@Lazy
validator [SPR-15629] #20188 - Poor diagnostics when Jackson cannot deserialise an application/json payload due to a missing deserialiser [SPR-15582] #20141
- Consistently accept "taskExecutor" bean of type Executor (as stated in
@EnableAsync
's javadoc) [SPR-15566] #20125 - LocalValidatorFactoryBean does not support unwrap for native ValidatorFactory [SPR-15561] #20120
- Multipart range requests leave file handles open [SPR-15559] #20118
- o/s/mail/javamail mime.types has duplicate image/jpeg entries [SPR-15557] #20116
- ResourceUtils.extractArchiveURL fails to work under Tomcat 8.0.41 with unpackWARs=false [SPR-15556] #20115
- o/s/mail/javamail mime.types PNG mapped to image/x-png [SPR-15546] #20105
- DefaultSubscriptionRegistry should prevent duplicate subscription id in accessCache [SPR-15543] #20102
- WebJarsResourceResolver: multiple matches in case of multiple files with the same name in the same webjar [SPR-15526] #20085
- HandlerExecutionChain toString() may miss interceptors [SPR-15525] #20084
- "Not a setter" exception cannot be be thrown in Property.java [SPR-15507] #20066
- AbstractFlashMapManager.isFlashMapForRequest does not inspect forwarded request coherently [SPR-15505] #20064
- Deceptive error message in Spring Test ModelResultMatchers [SPR-15487] #20047
- Last modified check of Resource created from Tomcat war:file: URL fails with FileNotFoundException [SPR-15485] #20045
- AnnotationUtils.getValue() may hide relevant errors [SPR-15481] #20041
📔 Documentation
5.0 RC1 Release
⭐ New Features
- Consider adding originalMessage to ErrorMessage [SPR-15459] #22193
- Unable to emulate upload filename browser behaviour with RestTemplate [SPR-15538] #20097
- Cache spring.factories loads [SPR-15509] #20068
- Improve 500 error handling and reporting in WebFlux [SPR-15506] #20065
- WebTestClient Support WebFilter only [SPR-15499] #20058
- WebTestClient should support custom HandlerMethodArgumentResolver [SPR-15495] #20055
- Support resolving Mono & Mono [SPR-15494] #20054
- Revisit handling of 4xx and 5xx status codes in WebClient [SPR-15486] #20046
- Expose Jackson2CodecSupport mime types for custom override [SPR-15474] #20034
- Support RequestMappingHandlerMapping registrations in the StandaloneMockMvcBuilder setup [SPR-15472] #20032
- Align WebMvcConfigurer with WebFluxConfigurer in terms of default methods [SPR-15465] #20025
- WebFlux should support Flux<?> and Flux rendering [SPR-15464] #20024
- Configure default settings for Servlet async request timeout for WebFlux [SPR-15463] #20023
- Add body(Object) method to ServerResponse.BodyBuilder [SPR-15461] #20021
- Move RxNetty support in test scope [SPR-15444] #20005
- Use ClientCodecConfigurer in ExchangeStrategies [SPR-15435] #19996
- Add "use" in Spring API documentation (Javadoc) [SPR-15427] #19988
- Add Consumer response body asssertions to WebTestClient [SPR-15421] #19982
- Add JSON content and JsonPath options to WebTestClient [SPR-15420] #19981
- Allow for single-pass matching in PathPattern [SPR-15419] #19980
- Functional bean dependencies tracking [SPR-15417] #19979
- JmsListener should allow delivery mode on response [SPR-15408] #19971
- Consider error handling strategy and support for WebClient [SPR-15403] #19966
- Deprecate AsyncRestTemplate in favour of WebClient [SPR-15399] #19962
- Refactor WebClient to not allow request body for GET/HEAD/etc [SPR-15394] #19957
- Support for
@Order
on nested configuration classes [SPR-15384] #19947 - Support server-side HttpMessage[Reader|Writer] in WebFlux fn [SPR-15370] #19934
- Resolve async attributes in View hierarchy instead of ViewResolutionResultHandler [SPR-15368] #19932
- Improve support for fixed content type in ContentNegotiationManager [SPR-15367] #19931
- Support for reactive types in return values from Spring MVC controllers [SPR-15365] #19929
- Documentation for WebFlux fn [SPR-15362] #19925
- Return 5xx/4xx status code and print the reason in logs for CodecException [SPR-15355] #19918
- Simplify creating ServerWebExchange for testing [SPR-15350] #19913
- WebTestClient Support WebFilter [SPR-15349] #19912
- Support testing WebFilterChain [SPR-15348] #19911
- Support ResponseStatusException in WebFlux functional [SPR-15344] #19907
- Make SpringExtension.getApplicationContext() public [SPR-15340] #19903
- Add PathPattern method that gives remaining path given a match [SPR-15336] #19899
- Cannot test finite SSE because converters are registered in a funny order [SPR-15331] #19894
- Improve error reporting on method arguments that don't support reactive types [SPR-15297] #19862
- Simplify access to request/response object in WebClient [SPR-15294] #19860
- Introduce ServerResponse Kotlin extensions [SPR-15293] #19859
- Polish Kotlin routing DSL [SPR-15292] #19858
- Use Java 8 getDeclaredAnnotation method in AnnotationUtils [SPR-15287] #19853
- Reliably detect
@Cacheable
declarations on interface methods [SPR-15271] #19836 - Add option for trailing separator matching in PathPatternParser [SPR-15260] #19825
- WebTestClient support for initializing the MockServerHttpRequest [SPR-15250] #19815
- Customizable Jackson ObjectMapper in WebFluxConfigurationSupport [SPR-15247] #19812
- Avoid creating thread pool in WebSocket Java config when SockJS not used [SPR-15233] #19798
- Update Cookie headers in MockHttpServletRequest and Response [SPR-15225] #19790
- Controller API for HTML rendering in WebFlux [SPR-15211] #19775
- Mock MVC / RequestBuilder should handle Accept-Language header appropriately [SPR-15209] #19773
- Data binding with immutable objects (Kotlin / Lombok /
@ConstructorProperties
) [SPR-15199] #19763 - Print session attributes in PrintingResultHandler in Spring MVC Test [SPR-15189] #19755
- MockMvcClientHttpRequestFactory should implement AsyncClientHttpRequestFactory as well [SPR-15181] #19747
- Support for
@ControllerAdvice
on the reactive side [SPR-15132] #19698 - Cglib proxy not working with
@Async
if there is another interceptor [SPR-14949] #19516 - Support for Jackson 2.9 [SPR-14925] #19492
- Support for JSON Binding API (JSON-B) [SPR-14923] #19490
- Reactive type support in org.springframework.core.Conventions [SPR-14915] #19482
- Reactive multipart request support [SPR-14546] #19114
- CGLIB proxies should still consider
@Transactional
annotations on interface methods [SPR-14322] #18894 - NPE thrown by WriteResultPublisher$State$2.publishComplete caused by a thread-safety issue [SPR-15418] #22192
- ISE is thrown when the client disconnects while the server is still sending the response [SPR-15412] #22191
- ResponseStatusException should allow to construct an instance without a reason [SPR-15524] #20083
- ResponseEntity<Flux<?>> causes Jackson binding exception [SPR-15478] #20038
- ServerResponse.BodyBuilder.body(Object) shadows body(Publisher) in Kotlin ServerResponseExtensions [SPR-15467] #20027
- Spel Expressions leaks...
🪲 Bug Fixes
4.3.8 Release
⭐ 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
📔 Documentation
4.3.7 Release
⭐ New Features
- Skip transaction/caching metadata retrieval for java.lang.Object methods [SPR-15296] #19861
- MessageHeaderAccessor's MutableMessageHeaders should be serializable [SPR-15262] #19827
- Consistently support CompletionStage next to CompletableFuture [SPR-15258] #19823
- Database.SQL_SERVER should set more recent Hibernate dialect with Spring 4.3.x [SPR-15255] #19820
- Allow configuring the ContentNegotiationManager in MockMVC standalone controller setup [SPR-15248] #19813
- DefaultSubscriptionRegistry should prevent duplicate Subscriptions per subscription id [SPR-15229] #19794
- Log failures to load PropertySources when ignoreResourceNotFound = true [SPR-15218] #19783
- Support for read-only transactions with Oracle 12c JDBC driver [SPR-15210] #19774
- TransactionSynchronizationManager - throw an Exception or log a warning if a Synchronization wants to add a Synchronization and afterCompletion is already called [SPR-11590] #16214
🪲 Bug Fixes
@Configuration
processing fails to handle AbstractFactoryBean.getObject() calls [SPR-15275] #19840- HEAD response has "Content-Length: 0" for
@RestController
@GetMapping
methods [SPR-15261] #19826 - RestTemplate with MockMvcClientHttpRequestFactory double encodes URIs [SPR-15254] #19819
- RestTemplate with Netty produces two Content-Length headers [SPR-15241] #19806
- MockHttpServletRequest.protocol default should be "HTTP/1.1", not "http" [SPR-15232] #19797
- DispatcherServlet's multipart request parsing fails during Jetty error dispatch [SPR-15231] #19796
- SettableListenableFuture may be successfully set with failureCallback executed and success callback ignored [SPR-15216] #19781
- MockHttpServletRequest.getReader() returns null in case of no content [SPR-15215] #19780
- Principal check in ServletRequestMethodArgumentResolver can result in type mismatches [SPR-15214] #19779
- HTTP Response should not contain both Transfer-Encoding and Content-Length headers [SPR-15212] #19776
- SettableListenableFuture may be both set and canceled successfully [SPR-15202] #19766
- Spring does not clean up db connection registered in afterCompletion callback [SPR-15194] #19759
- SpelCompiler VerifyError - Incompatible argument to function [SPR-15192] #19758
- If backing Cache is down
@CacheResult
does not seamlessly call method (in contrast to@Cacheable
) [SPR-15188] #19754 - InterceptingClientHttpRequest replaces headers set in request factory instead of merging them [SPR-15166] #19732
📔 Documentation
- CronSequenceGenerator examples in documentation are incorrect [SPR-15240] #19805