Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.3.7
⭐ New Features
- Ensure multipart temp directories do not collide #26931
- SpringBeanAutowiringSupport should log at warn level when autowiring fails #26925
- spring-context-indexer doesn't support Java records #26909
- Ignore trailing slash in CorsConfiguration origin patterns #26892
- RSocketRequester disposal of underlying RSocketClient #26886
- Add PreFlightRequestWebFilter #26885
- Avoid memory leak when PropertyComparator is reused #26869
- Support MySQL safe updates mode in MySQLMaxValueIncrementer #26858
- HttpStatus.resolve allocates HttpStatus.values() once per invocation #26842
- InvalidPathException in log when running SpringBootTest with NIO Path property on Windows #26828
- Use String.startsWith() instead of String.substring() in PatternMatchUtils #26822
- Access to the cachedSessions in CachingConnectionFactory #26811
- Reduce log level in ExecutorConfigurationSupport.initialize #26810
- Avoid exceptions when evaluating validation hints #26787
🪲 Bug Fixes
- UriComponentsBuilder handles invalid port numbers correctly #26905
- Incorrect check in AbstractBrokerRegistration's constructor #26896
- DataClassRowMapper doesn't correctly convert generic fields #26881
CorsRegistration#combine
is a noop #26877- LinkedCaseInsensitiveMap#putIfAbsent does not honor the case where the key is associated with a null value #26868
- Provide control over fallback charset to use in WebClientResponseException #26866
@ModelAttribute(binding=false)
is not honored with WebFlux #26856- Fix Kotlin filter parameter bug in Router DSLs #26838
- AbstractListenerReadPublisher publishing onComplete signal before onNext during heavy load #26834
- MockMvc's MVC_RESULT_ATTRIBUTE lost with HandlerMappingIntrospector and RouterFunctions in use #26833
- webmvc.fn onError doesn't work with CompletableFuture #26831
- Daylight saving time issue in CronExpression #26830
- HandlerMappingIntrospector does not work with PathPattern backed HandlerMappings #26814
- Addition of fallback patterns to DateFormatter loses cause in Spring 5.3.5 #26804
- Support empty file uploads with HtmlUnit and MockMvc #26799
- Cache setup failure does not provide nested cause #25250
- Fix web parameters resolution when injected via constructor #25200
📔 Documentation
- Document feature to load
@ModelAttribute
through type conversion from a request value #26873 - Improve advice on response handling in an ExchangeFilterFunction #26819
- Remove leftover Javadoc from WebClient #26807
- Add information about changed behaviour for resolving
@AuthenticationPrincipal
annotation #26791 - Update Javadoc on CORS in spring-websocket #26753
- Add advice on Spring MVC path matching for 5.3 and above to the reference documentation #26750
🔨 Dependency Upgrades
- Upgrade to Kotlin 1.5.0 #26792
- Upgrade to Kotlin Serialization 1.2.0 #26887
- Upgrade to Reactor 2020.0.7 #26890
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.15.RELEASE
⭐ New Features
- Ensure multipart temp directories do not collide #26932
- InvalidPathException in log when running SpringBootTest with NIO Path property on Windows #26894
- Spring AOP should not apply UndeclaredThrowableException to checked exceptions from Kotlin methods #26839
🪲 Bug Fixes
- Fix web parameters resolution when injected via constructor #26923
- Fix Kotlin filter parameter bug in Router DSLs #26921
- Incorrect check in AbstractBrokerRegistration's constructor #26898
@ModelAttribute(binding=false)
is not honored with WebFlux #26888
📔 Documentation
- Remove leftover Javadoc from WebClient #26809
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR20 #26891
v5.3.6
⭐ New Features
- Make sure file storage directory exists before usage in DefaultPartHttpMessageReader #26790
- Allow spring-expression to be more easily repackaged for embedding in third-party JARs #26779
- Support 'Accept-Patch' header in MVC and WebFlux #26759
- Invalid IPv6 Address with X-Forwarded-For leads to number format exception #26748
- awaitBodyOrNull function to handle empty body #26731
- Reactive AbstractErrorWebExceptionHandler#htmlEscape() may be blocking #26712
- Improve Docs on Testing Streaming Responses in Spring MVC #26687
- Exceptions for missing request values should expose information when they are missing after conversion #26679
🪲 Bug Fixes
- Addition of fallback patterns to temporal parser loses cause in Spring 5.3.5 #26777
- ResourceHttpRequestHandler fails to resolve encoded paths when PathPattern is used #26775
- Scheduling a task that runs once a day results in March 28 being skipped #26744
- Support UTF-8 in DefaultPartHttpMessageReader #26736
- Root path resolution for java.nio.Path properties does not work on Linux anymore #26702
@DirtiesContext
not applied when class-level@EnabledIf
evaluates to false #26694- MappedInterceptor in 5.3 does not support all AntPatternMatcher patterns #26690
- BridgeMethodResolver#isBridgeMethodFor return incorrect result for kotlin code in certain circumstance #26585
📔 Documentation
- Update ref docs regarding RequiredAnnotationBeanPostProcessor registration #26783
- Update documentation for
<context:annotation-config/>
#26782 - Fix javadoc link syntax #26776
🔨 Dependency Upgrades
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.14.RELEASE
⭐ New Features
- Add missing nullable annotation to ResponseEntity ok convenience method #26614
- Support cookies with Expires attribute but no Max-Age attribute in MockHttpServletResponse #26559
🪲 Bug Fixes
@DirtiesContext
not applied when class-level@EnabledIf
evaluates to false #26697- StatusAssertion value methods fail when used with custom status code #26666
- Local
@CrossOrigin
maxAge value should override global value #26620 - Correctly set auto-growing array's element #26606
- Fix handling of "file:" paths to non-existent files on Windows #26589
- ClassLoader.getResource can throw IllegalArgumentException #26588
- LoadTimeWeaver no longer weaves bean classes annotated with
@Component
#26584 - ResourceUrlProvider detects wrong set of handler mappings #26562
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR19 #26768
v5.3.5
⭐ New Features
- Expose
@JmsListener
endpoint id to annotation-derived listener container (for transaction definition name) #26683 - Add support for Oracle bind marker scheme using R2DBC #26680
- Add HTTP request cookies to the WebSocket handshake info #26674
- Add an MockMVC alwaysDo equivalent to WebTestClient #26662
- Ensure ClientResponse logPrefix Contains the Connection Id When Available #26656
- Make use of Reactor Netty API for request id #26649
- WriteResultPublisher does not pass cancel signals #26642
@EventListener
annotated bean cannot be removed from the ApplicationEventMulticaster #26638- Support global
@MessageExceptionHandler
via@ControllerAdvice
in RSocket #26636 - Support UTF-16 and UTF-32 in Jackson HttpMessageConverters #26627
- Add missing nullable annotation to ResponseEntity ok convenience method #26613
- OncePerRequestFilter.isAsyncDispatch may return a NPE #26602
- Allow AOP proxies to be created using the original ClassLoader #26601
- WebSocketHandlerRegistration is missing option for allowedOriginPatterns #26593
- HandlerMapping for WebSocket Requests Only #26565
- Support cookies with Expires attribute but no Max-Age attribute in MockHttpServletResponse #26558
- Allow logging REST endpoint mappings independent of other log categories #26539
- Introduce 'idleReceivesPerTaskLimit' in DefaultMessageListenerContainer #26442
- Improve handling of malformed Accept header for
@ExceptionHandler
methods #24539 - Support fallback parsing patterns in
@DateTimeFormat
#20292
🪲 Bug Fixes
- StatusAssertion value methods fail when used with custom status code #26658
- Jaxb2XmlEncoder Support for Custom XML Media Types #26655
- Local
@CrossOrigin
maxAge value should override global value #26619 - Multipart boundary should strip quotes #26616
- ServerHttpRequest content-type cannot be mutated #26615
- Correctly set auto-growing array's element #26600
- Change in behaviour for cron expression with day of the week range starting with SUN #26598
- Fix handling of "file:" paths to non-existent files on Windows #26575
- ClassLoader.getResource can throw IllegalArgumentException #26574
- ResourceUrlProvider detects wrong set of handler mappings #26561
- Dependency on Servlet 4.0 in spring-test makes it challenging to have Servlet 3.1 at runtime #26555
- Response writing fails to complete with WebFlux on Tomcat #26434
- LoadTimeWeaver no longer weaves bean classes annotated with
@Component
#26199
📔 Documentation
- Fix Commons FileUpload URL in reference guide #26678
- Update reference to deprecated CronSequenceGenerator #26651
- Update ref docs regarding deprecated
@Required
annotation #26578 - Fix build output directory for ref docs in CONTRIBUTING.md #26556
- Document all supported SpringProperties keys in the reference manual #26554
🔨 Dependency Upgrades
- Upgrade to Reactor 2020.0.5 #26650
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.3.4
⭐ New Features
- Enforce standard Java types in YamlProcessor #26530
- Fall back on awaitToBodylessEntity when awaitBody is used with Unit #26504
- Expose HttpHandler Decoration as a bean #26502
- Inefficient reflection operations for destroy method determination #26498
- Missing CORS Headers for Static Resources in WebFlux #26495
- Ignore null Locale in MockHttpServletResponse #26493
- Ignore null header value in MockHttpServletResponse #26488
- Add application/vnd.google.protobuf to ProtobufCodecSupport #26487
- Expose ChannelId in ReactorNettyWebsocketSession #26485
- Exclude User Destination Messages in Broker Message Handler #26474
- UriComponentsBuilder '{' '}' may not be encoded although invalid characters #26466
- Support BASE64 file name encoding in ContentDisposition #26463
- Allow AbstractEnvironment subclasses to use custom ConfigurablePropertyResolver and MutablePropertySources #26462
- Allow AbstractEnvironment to bypass active/default properties #26461
- No way to affect response when unhandled exceptions thrown from ForwardedHeaderTransformer #26459
- Support for servletPath prefix with PathPatternParser in Spring MVC #26445
- Add unique number to WebFlux log prefix for Undertow server #26430
- Provide a way to modify RequestMappingInfo conditions #26428
- Provide better lifecyle for WebMvcConfigurer.configurePathMatch #26427
- Fail early FactoryBean instantiation for LinkageError #26425
- Unwrap DataSource hidden behind InfrastructureProxy in SqlScriptsTestExecutionListener #26422
- Close mapping streams after the ValidatorFactory has been built in LocalValidatorFactoryBean #26418
- Introduce public defineClass variant for SmartClassLoader implementations #26403
- Return 415 for form data via
@RequestBody
in WebFlux #26386 - Make set operator for MapSqlParameterSource accept nullable value #26288
- Provide API to Expose the Handling of PreFlight Requests in WebFlux #26257
- Configure the ObjectMappers to Use for a Class by MediaType #26212
- Jetty 10 Support #26123
- Introduce a NativeDetector utility class #25795
- Add overload for MockRestServiceServer.verify with a timeout #22618
🪲 Bug Fixes
- IllegalArgumentException due to lack of a cached lookupPath #26546
- BeanUtils does not copy properties with generics from a Proxy since 5.3.0 #26531
- Autowiring shortcut fails with NoSuchBeanDefinitionException after removeBeanDefinition call #26517
- MockPart in request is not recieved in RequestPart in controller #26501
- CORS Headers Added to Pre-Flight Request on Ambiguous Match Even Without
@CrossOrigin
#26490 - SimpleJdbcInsert (sporadically) does not insert all columns #26486
- Avoid unnecessary wrapping for SqlParameterValue #26471
- DefaultHandlerExceptionResolver handling of media type exception on Tomcat 7+ #26470
- Websocket extensions not working #26449
- AbstractBeanDefinition#equals handles propertyValues incorrectly #26433
- WebMvcConfigurationSupport.beanNameHandlerMapping does not set PathPatternParser #26414
- Simple URL Mapping not working with PathPatternParser when Servlet context path is used #26411
- BodyInserters.fromMultipartData swallows content type in certain cases #26410
- MockPart is not added to parameter list anymore for Content-Type application/json #26400
- CronExpression skips a temporal when last day of the month and
*
expression is used #26390 - Malformed Content-Type Header in Response #26315
📔 Documentation
- Update ref docs for nested class names #26540
- RSocket support not linked from user guide index #26534
- Document the "SpringProperties mechanism" mentioned in the testing chapter #26492
- Document UriComponentsBuilder.pathSegment doesn't allow segments "without text" #26457
- UriComponentsBuilder documentation error for HTTP request encoding #26453
- Improve reference documentation on Resources #26447
- Update documentation with details on content negotiation and the order of converter registrations #26388
- Wrong documentation for CachePut #26186
- Document choices for async ResponseEntity return values #22614
🔨 Dependency Upgrades
- Update Gradle Enterprise Plugin versions #26374
- Upgrade to JUnit 4.13.2 #26543
- Upgrade to JUnit 5.7.1 #26510
- Upgrade to Kotlin 1.4.30 #26545
- Upgrade to Reactor 2020.0.4 #26548
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.13.RELEASE
⭐ New Features
- Inefficient reflection operations for destroy method determination #26499
- No way to affect response when unhandled exceptions thrown from ForwardedHeaderTransformer #26465
- Fail early FactoryBean instantiation for LinkageError #26426
- Close mapping streams after the ValidatorFactory has been built in LocalValidatorFactoryBean #26424
- Defensively handle loadClass null result in BeanUtils.findEditorByConvention (against misbehaving ClassLoader impl such as in the GWT JettyLauncher) #26256
🪲 Bug Fixes
- Avoid unnecessary wrapping for SqlParameterValue #26547
- Autowiring shortcut fails with NoSuchBeanDefinitionException after removeBeanDefinition call #26518
- SimpleJdbcInsert (sporadically) does not insert all columns #26503
- DefaultHandlerExceptionResolver handling of media type exception on Tomcat 7+ #26475
- Websocket extensions not working #26452
- AbstractBeanDefinition#equals handles propertyValues incorrectly #26435
- Remove obsolete commandName attribute in spring-form.tld #26338
- NettyHeadersAdapter.add() accepts
@Nullable
value but throws NullPointerException #26277
📔 Documentation
- Document the "SpringProperties mechanism" mentioned in the testing chapter #26494
- UriComponentsBuilder documentation error for HTTP request encoding #26455
- Wrong documentation for CachePut #26404
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR17 #26549
v5.3.3
⭐ New Features
- Add null check for ExceptionHandlerMethodResolvers #26339
- ClassNotFoundException: ExchangeFunction when using WebTestClient with Spring MVC #26308
- Early support for JDK 17 #26307
- Assertion error details lost in rethrow in assertWithDiagnostics #26303
- Update ReactiveAdapterRegistry to do classpath checks at class initialization #26295
- Problem with
@Schedule
with Quartz features in CronExpression #26289 - Make use of abortOnRequest in Jetty Reactive HttpClient #26287
- Update OncePerRequestFilter.isAsyncDispatch to use HttpServletRequest.getDispatcherType() #26282
- Introduce computeAttribute() in AttributeAccessor #26281
- Translate PostgreSQL code 21000 (cardinality_violation) #26276
- Consistent type resolution handling for NullBean #26271
- Defensively handle loadClass null result in BeanUtils.findEditorByConvention (against misbehaving ClassLoader impl such as in the GWT JettyLauncher) #26252
- Subscriber context not propagated to WebSocketHandler for Tomcat websockets #26210
- Introduce ApplicationEvents abstraction to capture application events published during a test #25616
- Spring AOP should not apply UndeclaredThrowableException to checked exceptions from Kotlin methods #23844
🪲 Bug Fixes
- Cannot remove headers from httpHeaders.keySet() in WebFlux #26361
- ClassCastException handling at SimpleApplicationEventMulticaster of payload items #26349
- DefaultPartHttpMessageReader creates live resources that won't be shut down #26347
- Sending empty Flux to RSocket channel causes DecodingException: JSON decoding error: No content to map due to end-of-input #26344
- Fix implementation of isOpen() in ReactorNettyWebSocketSession #26341
- Remove obsolete commandName attribute in spring-form.tld #26337
- The response has a duplicate "Content-Length" header when get by range header #26330
@ExceptionHandler
methods not invokable if matched on exception's cause level > 1 #26317- Switch to PathPatternParser for Spring MVC breaks welcome page auto configuration #26318
- CronExpression cannot parse combination of step values #26313
- Fix JdbcOperations.queryForObject/queryForList extensions #26312
- ClassCastException during websocket upgrade for mutated request #26304
- kotlinx.serialization should not be used for Java interfaces implemented by Java classes #26298
- NettyHeadersAdapter.add() accepts
@Nullable
value but throws NullPointerException #26274 - Lots of boundedElastic-evictor TIMED_WAITING threads related to form data requests #26263
- No originalFilename in MockMultipartFile now leads to add it just as part #26261
- UriComponentsBuilder fromUriString cannot parse File URI #26258
📔 Documentation
- Slow prototype bean creation when migrating spring-boot 2.3.5 -> 2.4.1 #26369
- Application built against Spring Framework 5.3 breaks deployment to Wildfly 9 #26355
- Improve MockMvc samples in reference to show where static imports come from #26311
- MultipartFile.getOriginalFilename() documentation should warn user not to use it as destination file name #26299
- Spring data DomainClassConverter broken with Spring 5.3 in case of missing entity #26296
- Document initialization and shutdown logging semantics for the TestContext framework #25385
🔨 Dependency Upgrades
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.3.2
⭐ New Features
- Refine ConfigurationClassPostProcessor behavior in native images #26236
- Ability to correlate ByteBuf leak records to log messages for a specific request #26230
- Avoid CGLIB proxies in websocket/messaging configuration #26227
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26182
- Allow customization of file extension to media type map for WebFlux static resources #26170
- Register bean definition dependencies when used via configuration class injected fields #26167
- Print helpful information in RSocket MetadataExtractor #26130
- Add ResponseSpec#toEntityFlux overload that accepts BodyExtractor #26114
- Wildcard is a valid Access-Control-Expose-Headers value #26113
- Reduce overhead of char[] creation #26101
- EntityManagerFactory startup failure in deferred mode is only available on first use #26093
@DynamicPropertySource
is not supported via@NestedTestConfiguration
semantics #26091- Introduce and() methods in MethodFilter and FieldFilter for composite filters #26063
- Kotlin extensions for WebClient.ResponseSpec #26030
- Validate that JUnit Jupiter test methods and lifecycle methods are not annotated with
@Autowired
#25966 - Add support for SSE to WebMvc.fn #25920
- Template URI Variables with newline %0A or %0D are not matched #23252
🪲 Bug Fixes
- AsyncServerResponse interoperability issue with path variables #26239
- Remove duplicate "property" in PropertyCacheKey.toString() #26237
- DataBuffer Leak in Server Response #26232
- Wrong HttpServletMapping used on INCLUDE in UrlPathHelper.skipServletPathDetermination #26216
- MockMvc ignores MultipartFile registrations when both files and parts are registered #26166
- cannot resolve
ServerRequest::pathVariable
in nestedRequestPredicate
#26163 - ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26155
- AbstractServerHttpRequest constructor breaks binary compatibility between 5.2.x and 5.3.x #26151
- Refine kotlinx.serialization support #26147
- MimeType is no longer actually serializable #26127
- Resttemplate throws NPE with spring-boot-starter-log4j2 within tests #26120
- Update default for favorPathExtension to match Javadoc and as intended for 5.3 #26119
- Spring Boot 2.4 upgrade breaks injection of Principal #26117
- NoSuchMethodError in UrlPathHelper.skipServletPathDetermination #26112
- Support allowedOriginPatterns in SockJS config #26108
- PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26104
@Transactional
causes casting error for suspending function on Spring MVC #26092- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26079
- NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26071
- Missing error status handling for
toEntityFlux
methods inWebClient
#26069 - DataBufferUtils#join may release a DataBuffer more than necessary #26060
- FlightRecorderApplicationStartup exception on processing Http Request #26057
- WebMvc.fn: ServerResponse.async does not handle exceptions as expected #25931
- Non-compliant Content-Type header for multipart media types #25885
- ResponseEntity Exception Handling Issues #25490
📔 Documentation
- Clarify intended advice execution behavior in Spring version 5.2.7+ #26202
- DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26134
- Spring EntityManager proxy is incompatible with Hibernate Search <5.11.6 (FullTextEntityManager instantiation fails with ClassCastException) #26090
- Null passed in required
@RequestParam
now fails #26088 - Mention security consideration in ForwardedHeaderFilter javadoc #26081
- Add cron expression documentation #26067
- Update javax.mail reference to jakarta.mail #25855
- Mechanism to access request bound objects in WebClient filter in servlet env #25710
- Document that
@Transactional
does not propagate to new threads #25439
🔨 Dependency Upgrades
- Upgrade to Kotlin Coroutines 1.4.2 #26226
- Upgrade to Reactor 2020.0.2 #26176
- Upgrade to Kotlin 1.4.21 #26132
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.12.RELEASE
⭐ New Features
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26191
- Register bean definition dependencies when used via configuration class injected fields #26168
- Wildcard is a valid Access-Control-Expose-Headers value #26115
- EntityManagerFactory startup failure in deferred mode is only available on first use #26094
🪲 Bug Fixes
- AbstractJackson2HttpMessageConverter writes partial data when exception occurs during write #26246
- Remove duplicate "property" in PropertyCacheKey.toString() #26242
- DataBuffer Leak in Server Response #26234
- GenericConversionService$Converters.getMatchableConverters throws ConcurrentModificationException on Java 9+ #26184
- ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26158
- MimeType is no longer actually serializable #26128
- PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26105
- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26083
- NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26073
- DataBufferUtils#join may release a DataBuffer more than necessary #26061
📔 Documentation
- Clarify intended advice execution behavior in Spring version 5.2.7+ #26204
- DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26135
- Document that
@Transactional
does not propagate to new threads #26102
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR15 #26175