Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.2.17.RELEASE
⭐ New Features
- Invalid JavaBean property 'logoutHandlers' being accessed (warning in the logs for Spring Security's ConcurrentSessionFilter) #27396
- Convenient configuration of type permissions for XStream 1.4.18 #27344
- ResponseStatusException.initCause always throws IllegalStateException #27212
🐞 Bug Fixes
- Support char, float, and double primitive default values in BeanUtils.instantiateClass() #27401
- CommonsMultipartResolver and DEBUG logging lead to empty fileMap in MultipartHttpServletRequest #27398
- Fix UrlPathHelper#shouldRemoveSemicolonContent() #27310
- CompositeUriComponentsContributor#hasContributors: method name is not compliant with its intention #27275
- WebSocketMessageBrokerStats.getExecutorStatsInfo() throws exception if Executor is not a ThreadPoolExecutor #27213
📔 Documentation
- Fix Kotlin example for filtering handler functions #27352
- Document when
prepareTestInstance()
is invoked when using theSpringMethodRule
#27312
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR23 #27378
v5.3.9
⭐ New Features
- Configure CommonsMultipartResolver to support specific HTTP methods #27161
- Allow BeanDefinitionBuilder to set an instance supplier with a ResolvableType #27160
- Reason of
@ResponseStatus
on handler method is not resolved by MessageSource #27156 - ResourceHandlerRegistry#getHandlerMapping should initialize handler once in outer loop #27153
- Set synthetic flag using BeanDefinitionBuilder #27141
- BeanCreationException error message should always include declaring class of constructor (or factory method) #27139
- Improve Jetty 10 check in JettyClientHttpResponse #27136
- Jetty10RequestUpgradeStrategy use an old jetty 9 class HandshakeRFC6455 #27121
- ClassNotFoundException using Jetty 10 and its reactive client #27112
- Use StringBuilder.append(char) where possible #27098
- Consider "wss" and "https" for secure flag in Forwarded header checks #27097
- SynchronossPartHttpMessageReader should only create temp directory when needed #27092
- Implement equals, hashCode, & toString in BeanMethod and *Metadata types #27076
- Remove logging dependency in BeanUtils #27070
- Exclude sealed interfaces from auto-proxying (for JDK 17 compatibility) #27027
- Blockhound error when running with transaction with a TransactionOperator #26955
- Configure StandardServletMultipartResolver to only support multipart/form-data #26826
- Add a way to set executeExistingDelayedTasksAfterShutdown from ThreadPoolTaskScheduler #26719
- Apply dynamic changes in ThreadPoolTaskExecutor before setting local value #26700
🪲 Bug Fixes
- JettyHttpHandlerAdapter is not aware of Server[Request|Response]Wrapper #27146
- {*path} pattern (CaptureTheRestPathElement) includes undocumented leading slash in
@PathVariable
path #27132 - NoSuchMethodError when invoke JettyWebSocketSession.getRemoteAddress in jetty 10 #27120
- CronExpression is still broken on spring-context-5.3.8 #27117
- SimpleMethodMetadataReadingVisitor.Source.toString() omits separator for method arguments #27095
- DefaultPathSegment allows shared empty parameters map to be mutated #27064
- AOP auto-proxying with proxyTargetClass=true and introduction advice does not work for JDK proxy targets #27044
- ServletRequestDataBinder assumes Standard servlet multipart handling #26999
- DataClassRowMapper should not override Kotlin init properties #26569
📔 Documentation
- Add Javadoc
@since
toBeanDefinitionBuilder.setSynthetic()
#27155 - Fix link to Javadoc API #27151
- Added description for HandlerInterceptor #27122
- Fix typo in core-beans.adoc #27113
- Fix typo in BeanDefinitionDsl.kt #27105
- Improve docs for getContentAsByteArray method of ContentCachingRequestWrapper #27068
- Fix explanation on default settings for content negotiation in reference doc #27067
- Document that any
@Valid*
annotation triggers validation in the reference manual #27050 - Improve RequestPartMethodArgumentResolver Javadoc #27043
- Improve RequestResponseBodyMethodProcessor Javadoc #27042
- Clarify that baseName in ResourceBundleMessageSource does not support multiple locations #27038
- Link alternate documentation formats #27015
🔨 Dependency Upgrades
- Compatibility with HtmlUnit 2.51 #27147
- Upgrade to ASM 9.2 (for early Java 18 support) #27069
- Upgrade to Kotlin 1.5.21 #27110
- Upgrade to Kotlin Coroutines 1.5.1 #27157
- Upgrade to Mockk 1.11.0 #27109
- Upgrade to Reactor 2020.0.9 #27158
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.2.16.RELEASE
⭐ New Features
- BeanCreationException error message should always include declaring class of constructor (or factory method) #27140
- SynchronossPartHttpMessageReader should only create temp directory when needed #27094
- Deprecate internal APIs in ScriptUtils implementations #26948
🪲 Bug Fixes
- AOP auto-proxying with proxyTargetClass=true and introduction advice does not work for JDK proxy targets #27148
- SimpleMethodMetadataReadingVisitor.Source.toString() omits separator for method arguments #27096
- DefaultPathSegment allows shared empty parameters map to be mutated #27065
- Ignore comments when searching for SQL statement delimiter in ScriptUtils #26942
- Ignore delimiter enclosed in double quotes in ScriptUtils #26936
📔 Documentation
- Fix
@Transactional
examples regarding method visibility #27005 - Improve
@Transactional
docs regarding method visibility #27004 - Document transactional semantics for
@TransactionalEventListener
after completion methods #26979
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR21 #27163
v5.3.8
⭐ New Features
- HttpComponentsClientHttpConnector should close underlying resources #27032
- Default value of StandaloneMockMvcBuilder.useSuffixPatternMatch differs from the same property in RequestMappingHandlerMapping #27030
- Lookup method autowiring ignores method's generic info #26998
- Set BEST_MATCHING_PATTERN_ATTRIBUTE on requests with WebMvc.fn #26963
- Remove jackson-module-kotlin warning #26962
- Switch back to parallel thread after WebSession id is generated #26958
- Introduce ResponseEntity.internalServerError() #26952
- Polish PORT_PATTERN in UriComponentsBuilder #26951
- Deprecate/Remove internal APIs in ScriptUtils implementations #26947
- Consider returning static DefaultApplicationStartup step #26939
- Exception in Tomcat when SockJS top URL is a WebSocket upgrade #26933
- Improve support for port numbers in allowedOriginPattern of CorsConfiguration #26927
- Add ApplicationEvent constructor for specifying timestamp #26871
- Add awaitExchangeOrNull extension function to reactive webclient #26778
🪲 Bug Fixes
- Revisit fix for gh-26905 in UriComponentsBuilder #27039
- MultipartHttpMessageWriter in WebClient doesn't use custom Jackson Encoder since 5.3.3 #27017
- PartFile name lost when building a MultiPart #27007
- No replacement of deprecated CronSequenceGenerator.isValidExpression #26996
- NPE if StompEndpointRegistry has allowedOrigins with null #26987
- CronExpression is broken on spring-context-5.3.6 #26964
- FlightRecorderApplicationStartup is not thread safe #26941
- Ignore delimiter enclosed in double quotes in ScriptUtils #26935
- Ignore comments when searching for SQL statement delimiter in ScriptUtils #26911
📔 Documentation
- spring-framework-main-code attribute has not been expanded in docs #27041
- Document that class-level
@ResponseStatus
is inherited by@ExceptionHandler
methods #27031 - Improve
@Transactional
docs regarding method visibility #27003 - Fix
@Transactional
examples regarding method visibility #27001 - Fix typo in code example #26980
- Document transactional semantics for
@TransactionalEventListener
after completion methods #26974 - Fix typo #26973
- Fix broken Javadoc tags #26967
🔨 Dependency Upgrades
- Upgrade to ASM master #27023
- Upgrade to Coroutines 1.5.0 #26897
- Upgrade to JUnit 5.7.2 #26946
- Upgrade to Kotlin 1.5.10 #27035
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
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!