Skip to content

Releases: spring-projects/spring-framework

v5.2.17.RELEASE

15 Sep 08:41
Compare
Choose a tag to compare

⭐ 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 the SpringMethodRule #27312

🔨 Dependency Upgrades

  • Upgrade to Reactor Dysprosium-SR23 #27378

v5.3.9

14 Jul 07:19
Compare
Choose a tag to compare

⭐ 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 to BeanDefinitionBuilder.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

14 Jul 08:29
Compare
Choose a tag to compare

⭐ 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

09 Jun 08:08
Compare
Choose a tag to compare

⭐ 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

12 May 06:08
Compare
Choose a tag to compare

⭐ 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

12 May 06:31
Compare
Choose a tag to compare

⭐ 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

13 Apr 11:26
Compare
Choose a tag to compare

⭐ 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

  • Upgrade to Objenesis 3.2 #26714
  • Upgrade to Reactor 2020.0.6 #26767

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.2.14.RELEASE

13 Apr 12:09
Compare
Choose a tag to compare

⭐ 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

16 Mar 09:27
Compare
Choose a tag to compare

⭐ 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

16 Feb 11:19
Compare
Choose a tag to compare

⭐ 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!