Skip to content

Releases: spring-projects/spring-framework

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

v6.0.4

11 Jan 13:05
Compare
Choose a tag to compare

⭐ New Features

  • Add native support for @Convert on JPA entities #29771
  • @RequestPart dto not configured for reflection in aot #29749
  • Avoid wasted memory on empty maps and sets #29742
  • Compatibility with Hibernate ORM 6.2 #29736
  • Add Kotlin DSL support for MockMVC andExpectAll #29727
  • Add ExecutingResponseCreator to delegate request and response #29721
  • JmsTemplate.convertAndSend throws NullPointerException during shutdown #29706
  • Extract ResourceEntityResolver HTTPS schema resolution fallback #29697
  • @Configuration classes with Kotlin in native-image are broken #29663
  • Introduce Kotlin DSL for ResultActions.andExpectAll() #27317

🐞 Bug Fixes

  • ResourceHandlers cannot resolve static resources with certain wildcard patterns #29712
  • Conflict on insert gets translated to DataIntegrityViolationException instead of DuplicateKeyException in Spring 6 #29699

πŸ“” Documentation

  • fix typo in core-aot.adoc #29788
  • Polish #29727: Mention Kotlin andExpectAll in reference manual #29766
  • Update Jakarta Mail info in ref docs #29707
  • Trigger/TriggerContext reference documentation outdated #29702
  • Improve documentation for literals in SpEL expressions #29700
  • Small fixes and improvements to the reference documentation #29694
  • Fix manipulating property sources example in Javadoc for ConfigurableEnvironment #29693

πŸ”¨ Dependency Upgrades

  • Upgrade to Micrometer 1.10.3 #29802
  • Upgrade to Reactor 2022.0.2 #29797

❀️ Contributors

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

@Dunemaster, @IDJack, @diguage, @izeye, and @quim3ra

v5.3.25

11 Jan 13:06
Compare
Choose a tag to compare

⭐ New Features

  • JmsTemplate.convertAndSend throws NullPointerException during shutdown #29719
  • Optimize object creation in RequestMappingHandlerMapping#handleNoMatch #29667
  • Add title to SockJS iFrames for accessibility compliance #29596

🐞 Bug Fixes

  • ResourceHandlers cannot resolve static resources with certain wildcard patterns #29716
  • AnnotatedElementUtils.findMergedRepeatableAnnotations does not fetch results when other attributes exist for container annotation #29686
  • BeanWrapperImpl NPE in setWrappedInstance after invoking getPropertyValue (with SimpleBeanInfoFactory) #29684
  • SpEL ConstructorReference does not generate AST representation of arrays #29666
  • SpEL: Two double quotes are replaced by one double quote in single quoted String literal (and vice versa) #29653
  • SpEL string literal misses single quotation marks in toStringAST() #29652
  • 500 error from WebFlux when parsing Content-Type leads to InvalidMediaTypeException #29637
  • WebMvcConfigurationSupport should not catch Throwable for SourceHttpMessageConverter #29537

πŸ“” Documentation

  • Update Jakarta Mail info in ref docs #29708
  • Improve documentation for literals in SpEL expressions #29701
  • Fix some typos in Kotlin WebClient example code #29542
  • Fix link to Bean Utils Light Library in BeanUtils Javadoc #29536
  • Fix link to WebFlux section in reference manual #29526
  • Link to Spring WebFlux section is broken #29517

πŸ”¨ Dependency Upgrades

  • Upgrade to Reactor 2020.0.27 #29798

v6.0.3

15 Dec 09:31
Compare
Choose a tag to compare

⭐ New Features

  • Throw PessimisticLockingFailureException/CannotAcquireLockException instead of plain ConcurrencyFailureException #29675
  • Introduce additional constructors in MockClientHttpRequest and MockClientHttpResponse #29670
  • Fall back to JdkClientHttpConnector as ClientHttpConnector #29645
  • Optimize object creation in RequestMappingHandlerMapping#handleNoMatch #29634
  • Align multipart codecs on client and server #29630
  • Deprecate "application/graphql+json" media type after spec changes #29617
  • HTTP interface client does not call FormHttpMessageWriter when writing form data #29615
  • ProblemDetail doesn't override the equals method #29606
  • Add title to SockJS iFrames for accessibility compliance #29594
  • Forbid loading of a test's ApplicationContext in AOT mode if AOT processing failed #29579
  • Deprecate JettyWebSocketClient in favor of StandardWebSocketClient #29576
  • Improve options to expose MessageSource formatted errors for a ProblemDetail response #29574
  • Make @ModelAttribute and @InitBinder annotations @Reflective #29572
  • Update BindingReflectionHintsRegistrar to support properties on records #29571

🐞 Bug Fixes

  • Cannot use WebDAV methods in Spring MVC 6.0 anymore #29689
  • AnnotatedElementUtils.findMergedRepeatableAnnotations does not fetch results when other attributes exist in container annotation #29685
  • BeanWrapperImpl NPE in setWrappedInstance after invoking getPropertyValue #29681
  • SpEL ConstructorReference does not generate AST representation of arrays #29665
  • NullPointerException in BindingReflectionHintsRegistrar for anonymous classes #29657
  • DataBufferInputStream violates InputStream contract #29642
  • Component scanning no longer uses component index for @Named, @ManagedBean, and other Jakarta annotations #29641
  • Fix canWrite in PartHttpMessageWriter #29631
  • NoHandlerFoundException mistakenly returns request headers from ErrorResponse#getHeaders #29626
  • URI override for @HttpExchange doesn't work if there are both URI and @PathVariable method parameters #29624
  • Unnecessary parameter name introspection for constructor-arg resolution (leading to LocalVariableTableParameterNameDiscoverer warnings) #29612
  • Set detail from reason in both constructors of ResponseStatusException #29608
  • SpEL string literal misses single quotation marks in toStringAST() #29604
  • AOT code generation fails for bean of type boolean #29598
  • request-scoped bean with @Lazy fails in native image (due to missing detection of CGLIB lazy resolution proxies) #29584
  • 500 error from WebFlux when parsing Content-Type leads to InvalidMediaTypeException #29565
  • ConcurrentLruCache implementation is using too much heap memory #29520
  • Duplicate key violation gets translated to DataIntegrityViolationException instead of DuplicateKeyException in Spring 6 #29511
  • SpEL: Two double quotes are replaced by one double quote in single quoted String literal (and vice versa) #28356

πŸ“” Documentation

  • Fix ErrorResponse#type documentation #29632
  • Fix typo in observability documentation #29590
  • Consistent documentation references to Jakarta WebSocket (2.1) #29581
  • Unrendered asciidoc headings in reference documentation #29569
  • Document observability support #29524

πŸ”¨ Dependency Upgrades

  • Upgrade to Apache HttpClient 5.2 #29627
  • Upgrade to Gradle 7.6 #29583
  • Upgrade to Micrometer 1.10.2 #29678
  • Upgrade to Reactor 2022.0.1 #29679

❀️ Contributors

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

@Aashay-Chapatwala, @CoderYellow, @ShenFeng312, @Spark61, @divcon, @izeye, @koo-taejin, @mdeinum, @mhalbritter, @quaff, and @singhbaljit

v6.0.2

24 Nov 14:22
Compare
Choose a tag to compare

⭐ New Features

  • Rely on standard parameter name resolution in Bean Validation 3.0 #29566

🐞 Bug Fixes

  • ResponseStatusException does not use the reason to set the "detail" field #29567
  • LocalVariableTableParameterNameDiscoverer logs many warnings with Hibernate validation #29563

πŸ“” Documentation

  • org.springframework.web.multipart.commons not found #29562