Skip to content

Releases: spring-projects/spring-framework

v5.3.28

15 Jun 11:35
Compare
Choose a tag to compare

⭐ New Features

  • ClassLoader can be null in DeserializingConverter and should be annotated with @Nullable #30672
  • Performance optimization in AbstractBeanFactoryBasedTargetSource.hashCode() #30585
  • Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30441
  • Reject null and empty SpEL expressions #30373
  • Introduce Environment.matchesProfiles() for profile expressions #30226

🐞 Bug Fixes

  • Change of behaviour for UUID in bean validation output in v5.3.27 #30662
  • Spring Framework 5.3.27 appears to cause issues in OSGi environment #30637
  • Inconsistent ProxyCallbackFilter#equals/hashCode methods in CglibAopProxy #30616
  • EclipseLinkJpaDialect: Unexpected default isolation levels #30589
  • ThreadLocalTargetSource does not include actual target bean name in NamedThreadLocal #30586
  • ApplicationListenerMethodAdapter inconsistently publishes events from CompletableFuture #30584
  • For @Bean method that returns null, @Autowired injects NullBean instead of null for cached arguments #30551
  • Make maximum SpEL expression length configurable #30446
  • Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30443

πŸ“” Documentation

  • Document which @Scheduled attributes support SpEL expressions #30642
  • FileSystemUtils::deleteRecursively Javadoc refers to File instead of Path #30555

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.33 #30656

v6.0.9

11 May 13:13
Compare
Choose a tag to compare

⭐ New Features

  • Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30440
  • Introduce internal constants for implicit bounds in TypeUtils #30423
  • Update major/minor version properties in MockServletContext #30395
  • Reject null and empty SpEL expressions #30371
  • Support Test AOT processing with GraalVM tracing agent and Native Build Tools #30281
  • Introduce Environment.matchesProfiles() for profile expressions #30206
  • Optimize MultiValueMap iteration operations #29972

🐞 Bug Fixes

  • Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30442
  • Qualifiers registered programmatically are not supported by AOT #30410
  • Support for InjectionPoint in bean factory methods when using AOT #30401
  • Bean methods with generic array/varargs parameters break native compilation #30407
  • ApplicationListenerMethodAdapter supports non-matching generic events #30399
  • Processing several @PersistenceContext injection points on the same class with AOT generates code that does not compile #30437
  • Make maximum SpEL expression length configurable #30380
  • Record beans do not compile to native images #30383
  • Missing resource hint for @PropertySource#value #30376
  • ApplicationEventPublisher - PayloadApplicationEvent not received by EventListener if event fired from child context #30360
  • StringDecoder.decode() should release chunks on cancellation #30299
  • Quote '?' in Quoted Printable filename #30252
  • Missing reflection hint for custom PropertySourceFactory in native image #30175
  • Aot generated sources fail to compile with 'File name too long' error #29846

πŸ“” Documentation

  • Update package-info for CGLIB fork #30461
  • Clarify differences between GenericBeanDefinition and RootBeanDefinition #30444
  • Document how to configure FactoryBean with a configurable target with AOT #30434
  • Add Antora docs-build branch #30415
  • Switch the reference documentation to Antora #30414
  • @ResponseStatus documentation incorrect #30305

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.10.7 #30451
  • Upgrade to Reactor 2022.0.7 #30450

❀️ Contributors

Thank you to all the contributors who worked on this release:

@divcon, @izeye, @luozhenyu, @rwinch, @sigee, and @yuzawa-san

v6.0.8

13 Apr 09:07
Compare
Choose a tag to compare

⭐ New Features

  • Disable variable assignment in SimpleEvaluationContext #30326
  • Limit SpEL expression length #30325
  • Limit string concatenation in SpEL expressions #30324
  • Introduce StringUtils.truncate() #30290
  • Introduce ObjectUtils.nullSafeConciseToString() #30286
  • Introduce assertions against Cookie attributes in CookieResultMatchers for MockMvc #30285
  • Polishing #30267
  • Support SameSite cookie attribute in MockMvcHttpConnector #30264
  • Update MockCookie to make use of Servlet 6.0 APIs and semantics for "attributes" #30263
  • Refine initRequestBuilder in DefaultWebClient #30254
  • HttpServerErrorException contains not-serializable field of type DefaultResponseErrorHandler #30224
  • Add class hints for Jackson annotations on fields and methods #30208
  • Add HttpMethod reflection hint to ObjectToObjectConverterRuntimeHints #30201
  • Improve performance of canRead() in HttpMessageReader's #30192
  • Optimize array creation in SpEL ConstructorReference #30189
  • ConstructorResolver error hints about mixing indexed and named args #30169
  • Replace Collections.unmodifiableList(new ArrayList(..)) with List.copyOf() #30166
  • Add assert null validations for DefaultServerResponseBuilder #30157
  • Use InputStream.readAllBytes() in FileCopyUtils.copyToByteArray() #30155
  • Cache ServerHttpRequest::getMethod in AbstractServerHttpRequest #30139
  • Use String.equals() in LiteralPathElement #30138
  • Optimize some iterations in BodyExtractor and BodyInserter #30136
  • Add a couple missing java.time types to StatementCreatorUtils #30123
  • WebClient observations should not record CANCEL signals as aborted if response was received #30070
  • Destroy method not found in native image if concrete bean type is not exposed #29545
  • Contribute init/destroy lifecycle introspection hints for registered beans #29246

🐞 Bug Fixes

  • NPE thrown for nonexistent default-destroy-method in XML config #30301
  • Fix comparison of title in equals() and hashCode() of ProblemDetail #30294
  • SSE breaks with indenting serializer in WebMvc.fn #30277
  • @HttpExchange interface does not resolve return type correctly while using with suspending methods #30266
  • Increase max regex length in SpEL expressions #30265
  • Missing response information from client observation context when filter functions fail #30247
  • NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30245
  • Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30220
  • Refine generic type management in AbstractMessageWriterResultHandler #30214
  • MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30210
  • Encode IPV6 Zone IDs (%) in ReactorServerHttpRequest #30188
  • Handle all exceptions for stored proc output param retrieval in SharedEntityManagerCreator #30161
  • Fix IllegalArgumentException that prevents STOMP DISCONNECT from reaching the client #30120
  • TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30115

πŸ“” Documentation

  • Add since tags to sameSite() and attribute() in CookieResultMatchersDsl #30308
  • Fix incorrect jakarta.inject artifact version #30270
  • Fix @PathVariable reference documentation code snippets #30243
  • Use diamond operator in examples in reference manual #30204
  • Fix example in Javadoc for @EnableWebSocket #30183
  • Fix anchor in link to "Web on Reactive Stack" chapter #30158
  • Documentation for Vavr's Try method to trigger transaction rollbacks #30108
  • Document that WebClient defaultStatusHandler do not apply to exchange* methods #30059

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.10.6 #30317
  • Upgrade to Reactor 2022.0.6 #30316

❀️ Contributors

Thank you to all the contributors who worked on this release:

@1993heqiang, @TAKETODAY, @ZouHongxue, @alexjansons, @divcon, @edyda99, @filipblondeel, @ghostg00, @giuseppemilicia, @izeye, @justin-tay, @krzyk, @kyuarl21, @quaff, @shitian9, @simonbasle, @srivatsa-cfp, @ssang1105, @stsypanov, @wizard4wu, and @yuzawa-san

v5.3.27

13 Apr 09:27
Compare
Choose a tag to compare

⭐ New Features

  • Limit string concatenation in SpEL expressions #30331
  • Limit SpEL expression length #30329
  • Disable variable assignment in SimpleEvaluationContext #30327
  • Introduce StringUtils.truncate() #30291
  • Introduce ObjectUtils.nullSafeConciseToString() #30287
  • Make HttpComponentsHeadersAdapter#getFirst nullable #30269

🐞 Bug Fixes

  • Fix regression in ReactorServerHttpRequest related to IPV6 Zone id with "%" #30314
  • SSE breaks with indenting serializer in WebMvc.fn #30302
  • Increase max regex length in SpEL expressions #30298
  • NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30246
  • Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30235
  • TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30228
  • Refine generic type management in AbstractMessageWriterResultHandler #30215
  • MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30212
  • Handle all exceptions for stored proc output param retrieval in SharedEntityManagerCreator #30164

πŸ“” Documentation

  • Fix @PathVariable reference documentation code snippets #30258
  • Fix example in Javadoc for @EnableWebSocket #30187
  • Fix anchor in link to "Web on Reactive Stack" chapter #30163

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.31 #30315

v5.2.24.RELEASE

13 Apr 09:42
Compare
Choose a tag to compare

⭐ New Features

  • Limit string concatenation in SpEL expressions #30332
  • Limit SpEL expression length #30330
  • Disable variable assignment in SimpleEvaluationContext #30328

v6.0.7

20 Mar 10:17
Compare
Choose a tag to compare

⭐ New Features

  • Improve diagnostics in SpEL for matches operator #30144
  • Improve diagnostics in SpEL for repeated text #30142
  • Increase scope of regex pattern cache for the SpEL matches operator #30140
  • Minor updates in HandlerMappingIntrospector #30127
  • Skip parameter name resolution when not needed in AbstractAutowireCapableBeanFactory #30103
  • Remove extra copy of headers/cookies in WebClient #30092
  • Assert non-null arguments in DefaultServerRequestBuilder methods #30046
  • Jetty 12 support in WebFlux #29575

🐞 Bug Fixes

  • Gradle task processAot fails when Bean Validation API present but no provider found #30130
  • ContentDisposition::parse does not support Windows paths #30111
  • BindException raised instead of MethodArgumentNotValidException subclass #30100
  • Ensure reactive transaction rollback on commit error #30096
  • CaffeineCacheManager getCache method cause thread block #30066
  • RequestedContentTypeResolver does not ignore quality factor when filtering */* media types #29915
  • @Autowired/@Value does not work on inner bean in native #29803
  • Avoid rollback after a commit failure in TransactionalOperator #27572
  • SpEL: cannot call methods declared in java.lang.Object on a JDK proxy #25316

πŸ“” Documentation

  • Add anchor rewrites in the reference documentation #30132
  • Fix minor spacings in webflux docs #30078
  • Add a list of observations produced by Spring Framework #30060

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.5 #30133

❀️ Contributors

Thank you to all the contributors who worked on this release:

@EnricSala, @MrCoffee77, @abelsromero, @edyda99, @liupeng12345, @srivatsa-cfp, and @yuzawa-san

v5.3.26

20 Mar 11:12
Compare
Choose a tag to compare

⭐ New Features

  • Improve diagnostics in SpEL for matches operator #30145
  • Improve diagnostics in SpEL for repeated text #30143
  • Increase scope of regex pattern cache for the SpEL matches operator #30141
  • Minor updates in HandlerMappingIntrospector #30128
  • Allow SnakeYaml 2.0 runtime compatibility #30097
  • Add missing @Nullable annotations to LogMessage.format methods #30009
  • ASM upgrade for JDK 20/21 support #29966
  • Allow MockRest to match header/queryParam value list with one Matcher #29964
  • Add MockMvc.multipart() Kotlin extensions with HttpMethod #29941
  • Release R2DBC connection when cleanup fails in transaction #29925
  • org.springframework.web.context.ContextLoader should lazily load ContextLoader.properties #29909
  • Improve generated default name for @JmsListener subscription #29902
  • Include all Hibernate query methods in SharedEntityManagerCreator's queryTerminatingMethods set #29888
  • SQL supplier in R2DBC DatabaseClient is eagerly invoked #29887
  • Spring Framework 5.3.x is incompatible with Jetty 10 (Client) #29867
  • Possible infinite forward loop with MockMvcWebConnection #29866
  • Refine Jackson2ObjectMapperBuilder#configureFeature exception handling #29860
  • Fix R2dbcTransactionManager debug log: don't log a Mono #29824

🐞 Bug Fixes

  • RequestedContentTypeResolver does not ignore quality factor when filtering */* media types #30121
  • SpEL: cannot call methods declared in java.lang.Object on a JDK proxy #30118
  • CaffeineCacheManager getCache method cause thread block #30085
  • Protect JMS connection creation against prepareConnection errors #30051
  • ReactorServerHttpRequest does not reflect forwarded host and port when forwarding-header-strategy=native or cloud platform detected #29974
  • WebSocket stats not updated correctly when sessions cleared #29947
  • Explicit target ClassLoader for interface-based proxies in MvcUriComponentsBuilder #29914
  • Closing an ApplicationContext leads to Exception at ExecutorServiceAdapter #29908
  • Invalid Accept header results in IllegalStateException #29836
  • JettyWebSocketCreator referenced from a method is not visible from class loader with Jetty10RequestUpgradeStrategy #29256

πŸ“” Documentation

  • Fix minor spacings in webflux docs #30095
  • @AspectJ argument name resolution algorithm is outdated in reference manual #30057
  • Fix "Configuring a Global Date and Time Format" example #30036
  • Consistent @Bean method return type for equivalence with XML example #29970
  • Update @DynamicPropertySource examples regarding changes in Testcontainers #29940
  • Clarify semantics of primitivesDefaultedForNullValue in BeanPropertyRowMapper #29926
  • Clearly document that DataClassRowMapper supports Java records #29922
  • Outdated Javadoc for AbstractApplicationContext.postProcessBeanFactory #29916

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor Netty 2020.0.30 #30116

5.2.23.RELEASE

20 Mar 14:48
Compare
Choose a tag to compare

⭐ New Features

  • Improve diagnostics in SpEL for matches operator #30150
  • Improve diagnostics in SpEL for repeated text #30149
  • Increase scope of regex pattern cache for the SpEL matches operator #30148

v6.0.6

02 Mar 18:44
Compare
Choose a tag to compare

⭐ New Features

  • Prefer request hostName and hostPort in ReactorServerHttpRequest #30062
  • Use readNBytes in ByteArrayHttpMessageConverter when contentLength is available #30010
  • Add missing @Nullable annotations to LogMessage.format methods #30006
  • Refine CoroutinesUtils#invokeSuspendingFunction contract #30005
  • @SubscribeMapping method not called when built as native image #30002
  • Provide method with ContextView instead of Context in ServerWebExchangeContextFilter #29691
  • Support @Value for record injection #28774

🐞 Bug Fixes

  • WebClient now requires scheme #30053
  • Move HttpServiceProxyFactoryExtensions.kt to spring-web module #30042
  • AutowireCapableBeanFactory.createBean does not prefer default constructor anymore #30041
  • Server request URL with spring-webflux 6.0.5 is in resolved IP6 format #30033
  • PathMatchingResourcePatternResolver can no longer handle paths containing spaces and special characters #30031
  • Catch defensively exception thrown by validation contraints AOT processing of Kotlin extensions #30037
  • Fix proxy hint Kotlin extensions #30025
  • WebFlux fails with WebDAV HTTP methods #29981
  • NullPointerException if passing an anonymous class to ReflectionsHint#registerType #29774
  • Native hints for package private methods on custom @Repository class #29764
  • Native version of webflux/r2dbc failed #29582
  • Protect JMS connection creation against prepareConnection errors #29116
  • SingleConnectionFactory - reconnection problem (AMQ Broker) #29115

πŸ“” Documentation

  • Fix "Configuring a Global Date and Time Format" example #30034
  • @AspectJ argument name resolution algorithm is outdated in reference manual #30026
  • Update comment in Javadoc of ServletRequestPathFilter DispatcherServlet relating to DispatcherServlet #30014
  • Revise AspectJ examples in the reference manual #30003
  • Revise chomp and fold settings in reference documentation #30001

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2022.0.4 #30063

❀️ Contributors

Thank you to all the contributors who worked on this release:

@1004789224, @1993heqiang, @AlexElin, @diguage, @divcon, @izeye, @kilink, @lenoch7, @sergiuprdn, @singhbaljit, and @violetagg

v6.0.5

15 Feb 16:49
Compare
Choose a tag to compare

⭐ New Features

  • Add RFC-8246 "immutable" attribute to CacheControl #29955
  • Allow MockRest to match header/queryParam value list with one Matcher #29953
  • DataBuffer should offer restricted access to underlying ByteBuffer #29943
  • Introduce HttpServiceProxyFactory#createClient Kotlin extension #29942
  • Support ProblemDetail serialization to XML with Jackson #29927
  • Refine TransactionalOperator.executeAndAwait nullability #29919
  • Early support for JDK 21 #29910
  • StringDecoder causes direct allocation of ByteBuffer #29889
  • Include all Hibernate query methods in SharedEntityManagerCreator's queryTerminatingMethods set #29886
  • Add native support for RSocketExchange. #29877
  • Add @Nullable to ProblemDetail.setProperty value argument #29868
  • Deprecate obsolete ConcurrentExecutorAdapter for removal in 6.1 #29865
  • ContentDisposition.toString() should include both regular and extended filename parameter #29861
  • Refine Jackson2ObjectMapperBuilder#configureFeature exception handling #29859
  • Flexible constructor resolution in AutowireCapableBeanFactory.createBean(Class) #29855
  • Optimize CorsConfiguration::checkHeaders #29853
  • Spring Web RestTemplate http.client.requests Metrics No Longer Have client.name Tag #29839
  • Allow @Aspect classes to extend concrete @Aspect classes #29830
  • Custom Constraint Validator not work with native image #29823
  • Deprecate HttpStatus 103 CHECKPOINT in favor of new EARLY_HINTS #29816
  • Fix R2dbcTransactionManager debug log: don't log a Mono #29800
  • Improve generated default name for @JmsListener subscription #29790
  • Support double-quoted values in HttpHeaders::getValuesAsList #29785
  • Support method validation for an interface only proxy like an HTTP interface client #29782
  • ResourceHandlers cannot resolve static resources without wildcard patterns #29739
  • Release R2DBC connection when cleanup fails in transaction #29703
  • Spring Webfilters and Kotlin Coroutines #29672
  • Support "multipart/mixed" and "multipart/related" in DefaultServerWebExchange #29671
  • @JsonDeserialize(builder = ...) does not work in GraalVM native image #29646
  • Combined class and method @RequestMapping without patterns should match root path as both "" and "/" #29625
  • Prefer problem detail media type independent of ordering in Accept header #29588
  • Restrict forwards in MockMvcWebConnection to 100 #29557
  • @JsonNaming strategy is not supported in GraalVM native image #29386
  • SQL supplier in R2DBC DatabaseClient is eagerly invoked #29367
  • Set reason for WebSocket CloseStatus.SESSION\_NOT\_RELIABLE #29220
  • HttpComponentsClientHttpConnector hangs when host is invalid #29156
  • Add ResponseEntity.ofNullable() to deal with non-Optional nullable objects #29117
  • Provide access to all configured interceptors in AbstractHandlerMapping #28985
  • Support Optional in PayloadMethodArgumentResolver #28945
  • Remove clear() call to release method of WeakEntryReference and SoftEntryReference #28863
  • Add MockMvc.multipart() Kotlin extensions with HttpMethod #28634
  • WebSocketConnectionManager constructor with prepared URI #28524
  • Deprecate Base64Utils #28434
  • List supported media types in HttpMediaTypeNotSupportedException when given invalid input media types #28062
  • Introduce getContentAsString and getContentAsByteArray to Resource #24651
  • Support Optional in Jackson 2 message converters #24498
  • Refine ModelAttributeMethodProcessor Kotlin exception handling #23846

🐞 Bug Fixes

  • DefaultHandlerExceptionResolver::doResolveException no longer returns ModelAndView customized via protected method #29971
  • ex.getPropertyName() is not initialized in ResponseEntityExceptionHandler#handleTypeMismatch #29959
  • Violation of a unique index on insert in MSSQL is translated to DataIntegrityViolationException instead of DuplicateKeyException #29950
  • PathMatchingResourcePatternResolver duplicates module/file resources #29934
  • ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException in tests #29933
  • Explicit target ClassLoader for interface-based proxies in MvcUriComponentsBuilder #29913
  • org.springframework.web.context.ContextLoader cannot be loaded in a native image #29905
  • MockHttpServletRequest InputStream has been made static in gh-29125 #29901
  • MvcUriComponentsBuilder adds trailing slash if path is defined at controller level only #29897
  • Closing an ApplicationContext leads to Exception at ExecutorServiceAdapter #29892
  • Set WebClient Observation as current in reactor context #29891
  • Client request observation contributes full URI template to uri meter tag values #29885
  • HTTP client observations miss uri keyvalue for "/" requests #29879
  • ProblemDetail is missing serialization hints for Native Image #29801
  • Invalid Accept header results in IllegalStateException #29794
  • AOT processing fails with Set if type doesn't implement Comparable #29792
  • CSRF token not available to FreeMarker templates #29787
  • Fail more explicitly when AOT attempts to handle a bean definition that uses an instance supplier #29556
  • WebSocket stats not updated correctly when sessions cleared #29375
  • MockHttpServletRequest#setContentType fails with StringIndexOutOfBoundsException #29255
  • InMemoryWebSessionStore#changeSessionId makes blocking calls to UUID.randomUUID [#29212](#29212...
Read more