All Versions
25
Latest Version
Avg Release Cycle
53 days
Latest Release
7 days ago

Changelog History
Page 1

  • v5.2.5.RELEASE

    March 24, 2020

    🍱 ⭐️ New Features

    • Do not cache multipart mime types in MimeTypeUtils LRU cache #24767
    • Declare proxyBeanMethods=false in JmsBootstrapConfiguration #24752
    • πŸ‘ Usage of java 14 record throws java.lang.UnsupportedOperationException: This feature requires ASM8_EXPERIMENTAL #24722
    • Non-public Kotlin beans can't be instantiated #24712
    • Avoid ClassCastException for CoyoteInputStream in TomcatHttpHandlerAdapter #24707
    • Avoid unnecessary sorting in AbstractHandlerMethodMapping #24704
    • πŸ‘Œ Improve performance of StringUtils#cleanPath #24674
    • ⚑️ Optimize global advisor registration in ProxyFactoryBean #24669
    • Short circuit check in SynthesizedMergedAnnotationInvocationHandler.isVisible() #24664
    • Ignore empty domain string in ResponseCookie #24663
    • βœ‚ Remove UTF-8 charset parameter from Content-Type in SseEmitter #24632
    • πŸ‘» Jaxb2XmlDecoder Does Not Throw Codec Exception For Invalid XML #24622
    • TransactionInterceptor constructors should accept a generic TransactionManager #24612
    • 0️⃣ Relax GraalVM checks in DefaultParameterNameDiscoverer #24600
    • πŸ‘ Multipart/related support in Spring Webclient #24582
    • πŸ‘ Consider supporting PreFlight requests and CORS in Servlet Functional Endpoints #24564
    • πŸ‘Œ Support for byte-range requests in Servlet Functional endpoints #24562
    • πŸ”§ Provide a mechanism to configure integration tests with a dynamic property source #24540
    • πŸ‘Œ Improve ConcurrentLruCache performance #24469
    • ⬇️ Reduce Class[] garbage when creating proxies #24221
    • implements checkNotModified for ServerRequest #24173
    • πŸ‘» AbstractSockJsSession exception when handling message with closed session #23828

    🍱 🐞 Bug Fixes

    • πŸ“¦ Missing nullability declarations for package web.socket.server.jetty #24745
    • πŸ‘€ MediaTypeNotSupportedStatusException seems unused #24743
    • πŸš€ MessagingRSocket incorrectly tries to release entire input stream on channel interaction #24741
    • 🐎 MimeTypeUtils performance degradation #24671
    • πŸ“‡ RSocket MetadataEncoder expands the routes incorrect #24656
    • Spring generates huge callstack for async requests #24652
    • CodecException (from JSON conversion) in RestController is not mapped to 400 but 500 (SB 2.2.5 & Kotlin) #24646
    • βž• addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24638
    • ShallowETagHeaderFilter (still) overwrites ETag and Content-Length #24635
    • Invalid JSON in requests now causes 500 instead of 400 #24630
    • Invalid request results in 500 INTERNAL ERROR instead of 400 BAD REQUEST (with Lombok and Kotlin) #24610
    • πŸš€ Distributions no longer deployed #24605
    • UnknownHttpStatusCodeException is missing the response body #24595
    • Implementing interface in abstract class does not expose parameter annotations #24127

    πŸ“” Documentation

    • Clarify name generation responsibility for PropertySourceFactory implementations #24757
    • πŸ‘Œ Improve Javadoc in @Configuration #24753
    • πŸ‘Œ Improve Javadoc in AnnotatedElementUtils #24740
    • Clarify behavior for WebClient statusHandlers #24736
    • ✨ Enhance Spring Core documentation, section 1.9.2. Using @Autowired #24711
    • 0️⃣ Do not mention credentials as enabled by default in CorsRegistry #24691
    • πŸ‘Œ Improve Javadoc in AutoProxyRegistrar #24688
    • πŸ‘Œ Improve javadoc in RollbackRuleAttribute regarding nested classes #24682
    • πŸ›  Fix typo in testing.adoc #24627
    • πŸ’… Polish ReactorResourceFactory #24620
    • πŸ›  Fix typo in reference manual #24597
    • βž• Add more lambda expressions in data-access code examples #24398

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to JUnit 5.6.1 #24762
    • ⬆️ Upgrade to Reactor Dysprosium SR6 #24725
    • ⬆️ Upgrade to Groovy 2.5.10 (for JDK 14 compatibility) #24719

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.4.RELEASE

    February 25, 2020

    🍱 ⭐️ New Features

    • BlockHoundIntegration for spring-core #24581
    • πŸ”§ Configure quiet period for shutting down Netty resources #24538
    • πŸ”§ Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24509
    • 🌲 Raise log level for exceptions from EntityManager close call #24501
    • πŸ‘ ExecutorConfigurationSupport to allow millisecond precision for await termination period #24496
    • πŸ‘Œ Improve assertion message in PersistenceExceptionTranslationInterceptor #24484
    • BigDecimal in multi-value request body deserializes differently than single-value #24479
    • If controller method has produces="/" in 5.2.3 response is 500 instead of 406 #24466
    • πŸ‘€ SseEmitter cannot format text/plain if StringHttpMessageConverter is not configured #24465
    • πŸ‘Œ Support command line arguments with an empty value #24464
    • AbstractJackson2HttpMessageConverter + Jackson 2.10: handle ValueInstantiationException properly #24455
    • Compatibility with JDK 14 #24453
    • Avoid opaque to hierarchical reset in UriComponentsBuilder when input is null #24444
    • βž• Add Informix to supported database products for procedure calls #24443
    • πŸ”’ Solve ReflectPermission issue in sandbox security policy model for repackaged CGLIB ReflectUtils #24420
    • πŸ‘ Allow non-standard HttpStatus in reactive ServerHttpResponse #24400
    • πŸ‘ Allow customizing default Smile codec via CodecConfigurer #24382
    • Simplify getCache() method in CaffeineCacheManager #24376
    • πŸ”¦ Expose property for handling of Ping frames with Reactor Netty WebSocket client and server #24367
    • πŸ“œ Simplify getParsedSql() method in NamedParameterJdbcTemplate #24358
    • Provide control over formatting of request in HttpWebHandlerAdapter #24352
    • βž• Add hook-point to exclude imported configuration classes #24175
    • 0️⃣ Jackson2Decoder fails to determine correct target type from default interface method with a generic type #23791
    • Extra empty line a["\n"] messages from ActiveMQ STOMP broker #23713
    • βž• Add a way to combine more than one AnnotationIntrospector in Jackson2ObjectMapperBuilder instead of overriding it #22830
    • βž• Add unique number to WebFlux log prefix for Reactor Netty server #22039

    🍱 🐞 Bug Fixes

    • 🀑 NullPointerException in MockHttpServletRequestBuilder for URI string with no protocol #24556
    • ⚠ BeanPostProcessorChecker warning due to missing infrastructure role on ProxyTransactionManagementConfiguration #24508
    • spring-aspects has a compile dependency on spring-orm #24491
    • πŸ“œ AbstractJackson2Decoder is not aware of jackson's non-blocking parser only supporting UTF-8 #24489
    • 🀑 MockRestServiceServer reset does not clear failedRequests #24486
    • πŸ“‡ Prevent unnecessary refresh for InjectionMetadata.EMPTY #24485
    • ⬆️ "Status and headers already sent" ISE exception from Reactor Netty on WebSocket upgrade #24475
    • The new Encoder.encodeValue and Decoder.decode methods in spring 5.2 do not provide access to the Context #24441
    • 🌲 Cycle in LogAdapter.Log4jLog initialization within log appender #24440
    • Negative byte values not properly converted to unsigned int in URI encoding #24413
    • ServerSentEventHttpMessageReader maps null when event has comment only. #24389
    • πŸ‘ Nested annotations no longer supported in ASM-based annotation processing #24375
    • Explicit Content-Type Header in WebClient is overwritten by ResourceHttpMessageWriter #24366
    • Avoid setting special Content-* response headers in TomcatHeadersAdapter #24361
    • IncompatibleClassChangeError encountered on execution of compiled SPEL expressions #24357
    • πŸ“œ JSON decoding error parsing stream encoded with Jackson Smile #24198

    πŸ“” Documentation

    • πŸ‘Œ Improve documentation for @Autowired/@Value in @Configuration classes #24585
    • πŸ›  Fix formatting in webflux-webclient.adoc #24578
    • Clarify AbstractResourceBasedMessageSource.setCacheMillis vs java.util.ResourceBundle #24563
    • πŸ“š Correct Ant-style Patterns example in documentation #24552
    • πŸ›  Fix javadoc in DependencyDescriptor #24551
    • πŸ“š Correct formatting of MessageSource example in documentation #24531
    • ⚑️ Update advice on RestTemplate #24503
    • πŸš€ Upgrade to Spring Asciidoctor Extensions 0.4.0.RELEASE #24481
    • πŸ›  Fix typo in StringUtils class #24471
    • πŸ“š Polish documentation format #24460
    • πŸ›  Fix Asciidoctor Warnings #24427
    • Reconsider recommended connection pools #24405
    • πŸ‘Œ Improve default experience of data binding from HTML date and time input fields #24370
    • πŸ‘ Document supported characters for identifiers in SpEL expressions #24359
    • Document that @Validated results in the use of a proxy and warn users about the side-effects #24338
    • πŸ—„ Deprecate use of path extensions in request mapping and content negotiation #24179

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to RSocket 1.0.0-RC6 #24482
    • ⬆️ Upgrade to ASM 7.3 #24438
    • ⬆️ Upgrade to Reactor Dysprosium SR5 #24355
    • ⬆️ Upgrade to JUnit Jupiter 5.6 #24299

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.3.RELEASE

    January 14, 2020

    🍱 ⭐️ New Features

    • ⚑️ Update throwable to SQLException #24337
    • ⚑️ Update CORS support #24327
    • πŸ‘Œ Improve exception message in AopContext.currentProxy() #24321
    • Trim line in LineInfo only once #24310
    • πŸ”€ Merge getCallableInterceptors and getDeferredResultInterceptors #24305
    • ⚑️ Optimize SimpleAliasRegistry hasAlias implementation #24295
    • πŸ‘Œ Improve ExposeInvocationInterceptor exception message #24293
    • βž• Add ContentLength support for InputStreamResource created in ResourceHttpMessageConverter and ResourceDecoder #24292
    • 0️⃣ StringHttpMessageConverter addDefaultHeaders() should check media type for wildcard before setting it into headers #24283
    • βž• Add fast path for ClassUtils.hasMethod #24282
    • πŸ‘Œ Support headers with multiple values in ResponseStatusException #24261
    • βœ‚ Remove quality parameter from chosen media type in WebFlux responses #24239
    • βœ‚ Remove Content-* response headers before error handling in WebFlux #24238
    • Reuse InputStream for ResourceRegionHttpMessageConverter #24214
    • πŸ—„ Un-deprecate PathResource (for java.nio.file.Path resolution in createRelative) #24211
    • 🚚 Simplify AdvisedSupport.removeAdvisor() #24205
    • βž• Add BeanPropertyRowMapper.newInstance(mappedClass, conversionService) #24195
    • Short-circuit in AbstractBeanDefinition.equals() #24185
    • πŸ”¦ Expose local address in reactive ServerHttpRequest #24174
    • πŸ‘Œ Improve exception message for mixed explicit and implicit aliases with @AliasFor #24168
    • Hoist constant result of SerializableTypeWrapper.unwrap() out of loop #24167
    • βž• Add "application/*+xml" as supported media type to XML decoders #24164
    • Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #24153
    • ⚑️ Let UriUtils.encode…(…) methods optimize for sources without the need to be encoded #24152
    • βž• Add accessor for logPrefix in ClientResponse to allow tying a ClientRequest to a ClientResponse #24146
    • πŸ‘Œ Support variable resolution of wildcard types #24145
    • βœ… WebTestClientExtensions.expectBody doesn't work for generic types #24142
    • βž• Add firstElement to CollectionUtils #24135
    • πŸ‘Œ Improve configuration API of ClientCodecConfigurer.CustomCodecs #24124
    • Introduce BeanNameGenerator based on fully qualified class name #24114
    • πŸ“œ ContentDisposition cannot parse encoded filename with leading space #24112
    • βž• Add option to encode MultiValueMap of query params #24043
    • AbstractMessageConverterMethodProcessor results in 406 with "Accept: /" when @RequestMapping produces condition determined the content type #23287
    • πŸ‘ Allow testing with any value for Content-Type and Accept header in MockHttpServletRequestBuilder #2079

    🍱 🐞 Bug Fixes

    • StringDecoder buffer leak related to maxInMemorySize limit #24339
    • πŸ— Cloning a WebClient.Builder instance does not copy strategiesConfigurers #24329
    • SimpleKey contains invalid hashcode on deserialization when parameters include an enum #24320
    • ServerSentEventHttpMessageReader does not respect maxInMemorySize and is always limited to 256k messages #24312
    • Unsafe double-checked locking in SpelExpression#compileExpression #24265
    • Ensure CORS processing does not add Vary header twice on async requests #24223
    • πŸ— Escape quotes in filename in ContentDisposition.Builder when charset not specified #24220
    • ClassUtils.getInterfaceMethodIfPossible overhead in cached methods for SpEL key/condition expressions #24206
    • ClientCodecConfigurer drops MultipartHttpMessageWriter.partWriters when mutated #24194
    • Regression: annotation searches no longer handle exceptions #24188
    • WebFlux may send incomplete response if the session persistence fails #24186
    • πŸ›  Fix RSocketRequester Coroutines extensions #24166
    • Regression: prototype @ControllerAdvice beans should not be cached #24157
    • Ensure MvcUriComponentsBuilder generates correct URL from type-level mapping without leading slash #24143
    • Annotation scanning in enclosing class hierarchy results in NoClassDefFound #24136
    • ReadCancellationException does not play well with onErrorContinue #24125
    • StringHttpMessageConverter lost a fix that assumed charset UTF-8 for "application/json" #24123
    • πŸ”€ Regression: default values for implicit aliases no longer honored in MergedAnnotations #24110
    • Functional Bean Definition DSL for noarg functions #23395

    πŸ“” Documentation

    • πŸ“„ Docs should warn against split URL handling across handler mappings #24304
    • [spring expression doc] symbolic logical operators #24276
    • πŸ›  Fix example in RSocket docs #24245
    • MappingJackson2MessageConverter: fix javadoc typo #24200
    • πŸ›  Fix typos in DataBufferUtils Javadocs #24160
    • TOC generated by asciidoc for core-beans.adoc is truncated #24132
    • πŸ“š WebFlux documentation states incorrectly that BindingResult is supported after @RequestBody #22997

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium SR3 #24349
    • ⬆️ Upgrade to Gradle build scan plugin 3.1.1 #24252
    • πŸš€ Upgrade to nohttp plugin 0.0.4.RELEASE #24251

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.2.RELEASE

    December 03, 2019

    🍱 ⭐️ New Features

    • 0️⃣ Provide default codecs config callback to custom codecs #24118
    • βž• Add protobuf MessageConverter #24087
    • Refine Throwable handling in spring-websocket #24075
    • πŸ‘Œ Improve part content type determination in MockMultipartHttpServletRequest #24074
    • Cache result of String.getBytes() in ExtendedBeanInfo.PropertyDescriptorComparator #24072
    • πŸ‘‰ Use String.isEmpty() instead of String.equals("") #24052
    • IOException "Closed while Pending/Unready" with WebFlux on Jetty #24050
    • Avoid substring allocation in StringUtils.replace #24023
    • πŸ‘‰ Use @MessageMapping method signature to constrain RSocket interaction model #23999
    • Avoid indefinite wait to connect in JettyWebSocketClient #23994
    • βž• Add queryParam method to MockHttpServletRequestBuilder #23980
    • Fallback locale other than the system locale in AbstractResourceBasedMessageSource #23977
    • πŸ‘Œ Support for new MySQL 8 error code 3572 #23972
    • Simplify ConstructorResolver: do not sort intermediate array #23969
    • Avoid store all beanName in ApplicationListenerDetector #23965
    • πŸ‘ Allow ExchangeStrategies customizations in WebClient #23961
    • πŸ‘‰ Use Method::getParameterCount where possible #23949
    • Align implementations of StringToUUIDConverter and UUIDEditor #23940
    • βœ… Use "non-blocking" thread for server-less tests in WebTestClient #23936
    • 0️⃣ Avoid default Accept header from HttpUrlConnection in RestTemplate with put and delete #23740 #23855
    • Reject "%2F" as an invalid sequence in simp messaging usernames #23836
    • ApplicationListenerMethodAdapter: gracefully handle beans which are actually NullBean #23784
    • Provide orNull extensions for WebFlux ServerRequest #23761
    • 🀑 MockMvc Kotlin DSL should support async dispatch #23758
    • πŸ“‡ RSocketRequestSpec handling metadata values that is a Publisher type #23640
    • Preserve the originalMessage when creating an ErrorMessage in MessageBuilder #23417
    • βž• Add an option to not include Charset in the final http request ContentType Header #22971
    • πŸ‘ Allow sending headers with the disconnect frame #22715
    • Avoid String concatenation for lookup in StaticMessageSource #22451
    • Keys for form data in FormHttpMessageConverter must not be null #22372
    • πŸ‘ XpathResultMatcher supports Hamcrest Matcher NodeList #2023
    • Error details in RestTemplate client and server exceptions #1956
    • Preserve "type" parameter in media type for Atom Feed/Entry message conversion #1885

    🍱 🐞 Bug fixes

    • Null pointer when connecting to RSocket #24088
    • Regression: @Inherited annotations declared in superclass are not recognized anymore #24077
    • RSocketRequester allows specifying data more than once #24073
    • Revise AbstractBeanDefinition equals implementation #24048
    • SqlRowSet accessor methods should be marked @Nullable #24042
    • Unsafe invocation of .value() on annotations in SynthesizedMergedAnnotationInvocationHandler prevents backwards-compatible additions to annotations #24029
    • InMemoryWebSessionStore makes blocking calls to UUID.randomUUID #24027
    • ControllerAdviceBean.findAnnotatedBeans() finds proxies as well as their target beans, resulting in double registration #24017
    • πŸ“œ NullPointerException in JSON codec parsing stream encoded with Jackson Smile #24009
    • πŸ›  Fix inappropriate eager init. #23992
    • Calling MethodParameter.isOptional() for Kotlin Continuation parameter fails with IndexOutOfBoundsException #23991
    • Regression: ControllerAdviceBean#getOrder() causes BeanCreationException for request scoped advice beans #23985
    • βœ… TestDispatcherServlet ambiguous handler methods with consumes condition and body not required #23978
    • AbstractRequestLoggingFilter.getHeaderPredicate is accidentally public #23976
    • Reading 'null' JSON response via WebClient fails in v5.2.x #23935
    • πŸ‘ Allow schemaZip Gradle task to execute on MS Windows #23933
    • Regression: AnnotationUtils.findAnnotation no longer finds non-inherited "java." annotations on superclasses #23929
    • ResponseCookie to allow leading dot in domain name again #23924
    • βœ… Regression in spring-test's 5.2.1 MockCookie parse implementation #23911
    • πŸ‘‰ useSuffixPatternMatch ignored if pathPrefix is also used #23907
    • Ensure InstantFormatter can properly deserialize ISO-formatted dates #23895
    • πŸ›  Fix RSocket Fire and forget handling with Kotlin #23866
    • SpEL cannot invoke Kotlin synthetic classes #23812
    • ShallowETagHeaderFilter overwrites ETag #23775
    • Corrupted multipart + correct content-length lead to Flux<Part> hanging #23768

    πŸ“” Documentation

    • [.] is displayed as [bold .] ,need to escape #24108
    • πŸ›  Fix consecutive-word duplications in documentation #24089
    • Examples in Data Access chapter declare unused JdbcTemplate fields #24085
    • Data Access chapter 3.5.1 uses bad pattern #24084
    • πŸ“š Documentation flaw for <tx:method/> settings #24080
    • πŸ›  Fix errors in documentation #24008
    • TypeDescriptor#getElementTypeDescriptor does not throw IllegalStateException anymore #23996
    • ⚑️ Update docs on ShallowEtagHeaderFilter with regards to ASYNC dispatches #23958
    • 0️⃣ DEFAULT_PHASE of SmartLifecycle interface has incorrect Javadoc #23956
    • πŸ“š Documentation for ForwardedHeaderFilter does not mention important filter order #23954
    • πŸ”§ Different behavior when injecting beans from local @Configuration class vs. external @Configuration classes #23934
    • Correct Javadoc for WebMvcConfigurer#addInterceptors #23922
    • πŸ‘Œ Improve WebClient.Builder::filter documentation #23342

    ⬆️ πŸ”¨ Dependency upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR2 #24037
    • ⬆️ Upgrade to Kotlin 1.3.61 #24006

    🍱 ❀️ Contributors

    πŸš€ We’d like to thank all the contributors who worked on our current release!

  • v5.2.1.RELEASE

    November 02, 2019

    🍱 ⭐️ New Features

    • πŸ‘Œ Support for limits on input stream processing in WebFlux codecs #23884
    • 🐎 Race condition affecting performance in AbstractJaxb2HttpMessageConverter - JAXBContext creation #23879
    • βž• Add RSocketRequester retrieveAndAwaitOrNull extension #23874
    • πŸ‘Œ Support unidirectional @AliasFor attribute mapping within an annotation #23834
    • πŸ‘ Allow setting primary flag on BeanDefinitionBuilder #23794
    • Introduce sessionAttributeDoesNotExist in RequestResultMatchers #23756
    • βœ… EventPublishingTestExecutionListener is not included in JUnit 4 and TestNG base classes #23748
    • ⚑️ Optimize Connection.setReadOnly(false) in DataSourceUtils.resetConnectionAfterTransaction(…) #23747
    • Handling of ResponseStatusException to also include setting of response headers #23741
    • πŸ›  Fix OkHttp3ClientHttpRequestFactory shutdown flow #23628

    🍱 🐞 Bug Fixes

    • Reorder date formatting converter in registrar #23893
    • πŸ”§ Revisit @Configuration(proxyBeanMethods = false) with qualified injection points #23887
    • πŸ›  Fixing NPE in AbstractNamedValueMethodArgumentResolver #23882
    • WebClient onStatus order changed #23880
    • TransactionalOperator::transactional does not close the transaction when cancelled #23864
    • βœ‚ Remove unused type parameter declarations in XpathRequestMatchers #23860
    • βœ‚ Remove unused type parameter declarations in MockMvc #23858
    • Repeatable annotation container no longer found on custom composed annotation #23856
    • πŸ”§ Missing CORS headers defined in SockJS CORS configuration #23843
    • Consider target transaction manager for traditional vs reactive transaction decision #23832
    • ⬆️ InaccessibleObjectException after upgrading to Framework 5.2 #23829
    • Incorrect value of the MediaType.APPLICATION_PROBLEM_JSON_UTF8 #23825
    • 🐎 Autowiring performance degradation due to 5.2's MethodParameter.getParameterType() implementation #23792
    • 🀑 Preserve expires attribute in MockCookie #23769
    • πŸ”§ Regression: attribute override configured via @AliasFor no longer honored in annotation hierarchy #23767
    • spring 5.2 dist.zip naming issue #23745
    • 🀑 MockServletContext should treat InvalidPathException like an IOException #23717

    πŸ“” Documentation

    • πŸ“š Update Spring Boot references in testing documentation #23848
    • πŸ›  Fix typo in rsocket doc #23762
    • πŸ›  Fixes broken links to dev.java.net #23746
    • πŸ›  Fix typo in web-uris doc #23739
    • πŸ“š Update documentation for importing projects into Eclipse #23706

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR1 #23871

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.0.RELEASE

    September 30, 2019
  • v5.2.0.RC2

    September 05, 2019

    🍱 ⭐️ New Features

    • Invalid partial content requests possible with start byte = resource-byte-count #23576
    • πŸ‘Œ Support invoking static methods with ReflectionTestUtils.invokeMethod() #23504
    • Detect ClientHttpConnector to use by checking classpath #23493
    • βœ‚ Remove statusCode state from ContentCachingResponseWrapper #23490
    • πŸ›  Fix "array index out of bounds" problem reported by LGTM.com #23485
    • πŸ”§ Explicit attribute overrides configured via @AliasFor not supported for components picked up via component scanning #23402
    • Provide a way to predict bean types without initializing FactoryBeans #23374
    • Pre-allocate NoTransactionException in TransactionContextManager #23360
    • πŸ‘‰ Use System.nanoTime() instead of System.currentTimeMillis() in StopWatch #23235
    • Correct encoding and decoding of "message/x.rsocket.routing.v0" #23137
    • βž• Add support for Coroutines transactions #22915

    🍱 🐞 Bug Fixes

    • βœ… Cannot use relative path following placeholder in @TestPropertySource locations #23544
    • Spring Webflux 5.2.0.M2 - Kotlin coroutines - ServerRequest.awaitPrincipal always null #22986

    πŸ“” Documentation

    • πŸ›  Fix typos related to indefinite articles #23555
    • βž• Adding Kotlin code examples to Testing documentation. #23545
    • βž• Add @since for getCacheFilter and setCacheFilter #23519
    • πŸ— Wiki build instructions for local Maven repo are outdated #23517
    • πŸ›  Fix unmatched parenthesis in the documentation of ContextHierarchy #23487
    • Modify the javadoc of @EnableWebFlux annotation #23457
    • πŸ“„ Kotlin examples in Spring Core docs should use extension functions with reified types #23456
    • πŸ‘Œ Improve language-switch CSS #23454
    • πŸ›  Fix data access documentation typo #23450
    • Fix / in Javadoc #23439
    • πŸ“š Reference documentation for ContextClosedEvent is misleading #23436
    • πŸ“š Reference documentation for @Autowired's required attribute is misleading #23428
    • Provide code samples in Kotlin in addition to Java [SPR-17245] #21778

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-RC1 #23579
    • ⬆️ Upgrade to RSocket 1.0 RC3 #23543
    • ⬆️ Upgrade to Kotlin 1.3.50 #23536
    • ⬆️ Upgrade to Kotlin Coroutines 1.3.0 #23535
    • ⬆️ Upgrade to CGLIB 3.3 #23453

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.0.RC1

    August 05, 2019

    🍱 ⭐️ New Features

    • πŸ—„ Deprecate mutable aspects of MethodParameter #23385
    • βž• Add status code 425 ("Too Early") to HttpStatus enum #23384
    • πŸ”€ Search for annotations on enclosing classes with MergedAnnotations API #23378
    • πŸ— RSocketRequester.Builder support for ConnectionSetupPayload #23368
    • Introduce SimpleUrlHandlerMapping constructor that accepts an order and a Map #23362
    • Introduce interface cache for proxied EntityManager and Query types #23345
    • Provide functionality similar to Spring Boot's BeanTypeRegistry #23341
    • βž• Add attribute support for FactoryBean bean definitions #23339
    • Consider generics when predicting FactoryBean types #23338
    • Cache isFactoryBean detection #23337
    • πŸ”€ Retain merged bean definition caches during post processing #23336
    • βž• Add missing ResolvableType variants of getBeanNamesForType #23335
    • βž• Add multi-prefix comment support for @SqlConfig #23331
    • πŸ‘Œ Support @TestPropertySource as a repeatable annotation #23320
    • βž• Add DataBuffer::toString(Charset) #23317
    • πŸ‘Œ Improvements to RSocketStrategies #23314
    • πŸ‘Œ Support for template routes with encoded separator in RSocketRequester #23310
    • Treat null path as non-matching pattern in AntPathMatcher #23297
    • βž• Add multi-prefix comment support for SQL scripts #23289
    • βž• Add a ScriptEngine factory to ScriptTemplateConfigurer #23258
    • 🌲 Log at WARN level in case of contradicting PersistenceUnitManager setup #23257
    • ExchangeFilterFunctions.basicAuthentication(String, String) should cache the encoded credentials #23256
    • Introduce TransactionOperations.execute(Runnable) convenience method #23250
    • πŸ‘» ExceptionHandlerExceptionResolver warns when re-throwing the exception cause #23233
    • πŸ”„ Change @TestConstructor.autowire attribute into an enum #23224
    • πŸ‘Œ Improve performance of FormContentFilter #23216
    • πŸ“œ MimeTypeUtils.parseMimeType returns null MIME type in case of high concurrency #23211
    • βž• Add explicit support for multipart/mixed in FormHttpMessageConverter #23209
    • πŸ‘€ AbstractMessageConverterMethodProcessor results in 406 even when ResponseEntity presets content type #23205
    • BasicAuthenticationInterceptor should cache the encoded credentials #23204
    • πŸ‘ Introduce addSupportedMediaTypes() in FormHttpMessageConverter #23203
    • βž• Add no-op TransactionOperations implementation #23198
    • @CacheEvict beforeInvocation with transaction does not work #23192
    • Presort beans in ControllerAdviceBean.findAnnotatedBeans() #23188
    • Consider generics on ApplicationListener @Bean methods #23178
    • ConnectionMapping annotation for handling of RSocket connection-level frames #23177
    • πŸ‘Œ Support for registering handlers in RSocketRequester.Builder #23170
    • πŸ‘ Leverage new Kotlin script templating support #23165
    • πŸ‘Œ Improve RSocketRequester.ResponseSpec Kotlin extensions #23164
    • πŸ‘Œ Support Ordered interface for @ControllerAdvice beans #23163
    • πŸ‘Œ Support multipart/related and multipart/mixed MediaTypes in RestTemplate #23159
    • πŸ“‡ RSocket Metadata Mimetype "text/plain" and "application/json" support #23157
    • 0️⃣ onStatus throws away default status handler #23155
    • Forbid null HttpMessageConverter in RestTemplate and HttpMessageConverterExtractor #23151
    • πŸ‘Œ Support target type in MockMvcResultMatchers.jsonPath() #23141
    • UrlBasedViewResolvers should not override custom requestContextAttribute with null #23129
    • βž• Add queryParams and replaceQueryParams with Collection to UriBuilder #23119
    • Provide functionality similar to Spring Boot's BeanTypeRegistry #23056
    • πŸ”¦ Expose default error handling from RequestHeadersSpec::retrieve for use with RequestHeadersSpec::exchange #22825
    • πŸ‘‰ Use the accepted profiles on the BeanDefinitionDsl #22393
    • Consider conditional view caching #22391
    • WebClient's ResponseSpec should provide access to response headers #22368
    • πŸ‘Œ Support for non-blocking event listener methods [SPR-17298] #21831
    • πŸ”€ Merge class-level and method-level @Sql declarations #1835

    🍱 🐞 Bug Fixes

    • @TransactionalEventListener should not receive an event if no transaction is active #23276
    • 🀑 MockMvc no longer handles UTF-8 characters #23219
    • NullPointerException when FormContentFilter handles a request with no content type #23215
    • RSocketRequester.ResponseSpec Kotlin extensions issue #23185
    • PathPattern::extractPathWithinPattern does not use custom separator #23168
    • πŸ“œ PathPatternRouteMatcher should parse routes with custom separator #23167
    • 0️⃣ DefaultMultipartMessageReader.FilePartPart.content not available under Reactor Netty #23131
    • 0️⃣ DefaultMultipartMessageReader.FilePart.transferTo fails occasionally #23130

    πŸ“” Documentation

    • πŸ›  Fix grammar in package-info.java #23401
    • βž• Add since tag for ClientResponse.Builder.request() #23364
    • πŸ›  Fix typo in data-access.adoc #23247
    • πŸ›  Fix typo in CONTRIBUTING.md #23180
    • βœ… Document supported @Transactional attributes in the TestContext framework #23149
    • πŸ‘ Document WebFlux FreeMarker macro support in Reference Manual #23133
    • βž• Add since for JettyClientHttpConnector change #23128
    • πŸ‘Œ Improve Kotlin integration testing documentation #22875

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to RSocket 1.0.0-RC2 #23359
    • ⬆️ Upgrade to ASM 7.2 #23156
    • ⬆️ Upgrade to JUnit Jupiter 5.5 #23076

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.0.M3

    June 13, 2019

    🍱 ⭐️ New Features

    • 🌲 Log exception when closing InputStream in AbstractResource #23116
    • βž• Add MultiValueMap.addIfAbsent method #23111
    • πŸ‘ Allow Printers and Parsers to be registered individually to FormatterRegistry #23110
    • πŸ‘Œ Improve FreeMarker macro support in spring-webflux #23105
    • Annotate Object#equals parameter with @Nullable #23093
    • πŸ‘ Allow separator configuration in PathPatternParser #23092
    • Side effect from ProducesRequestCondition cache with multiple RequestMappingHandlerMapping beans #23091
    • Refine Coroutines adapter registration activation #23087
    • πŸ“‡ Rename TransactionSynchronizationManager#currentTransaction to something more meaningful #23086
    • πŸ‘Œ Support filename input in MultipartBodyBuilder #23083
    • πŸ‘Œ Support consistent ordering of string adapting properties #23081
    • βž• Add constants for application/cbor to MediaType #23042
    • Avoid unnecessary call to get message type #23040
    • πŸ‘Œ Support for fine-grained by-type references in the bean definition model #23032
    • RestTemplateXhrTransport fails for a StreamingHttpOutputMessage type request #23030
    • Provide utility for writing Properties to a file in a repeatable manner #23018
    • πŸ”¦ Expose StompSubProtocolHandler and StompBrokerRelayMessageHandler metrics #23015
    • πŸ”§ Ensure access to configured mime types in client-side RSocket requester or responder #23012
    • πŸ‘ Consistently support CompletionStage/CompletableFuture in ReactiveAdapterRegistry #23011
    • βž• Add FreeMarker macro support in spring-webflux #23002
    • NamedParameterJdbcTemplate: treat Iterable parameters like Collections #22981
    • βž• Add JettyClientHttpConnector that accepts a HttpClient instance and a JettyResourceFactory #22977
    • βž• Add HttpHeaders.getOrEmpty(…) to avoid clients having to default to an empy list #22949
    • ⏱ messageBrokerTaskScheduler incorrect type #22943
    • πŸ‘Œ Support composite metadata in RSocketRequester and MessageHandlerAcceptor #22798
    • βž• Add leading slash for path predicate if not present #22795
    • Enable use of PathPattern for RSocket routing #22642
    • Ensure indexer output is deterministic and repeatable #22383

    🍱 🐞 Bug Fixes

    • πŸ‘» Soft reference-based cache causes confusing exception message from AnnotationTypeMapping resolveAliasTarget #23010

    πŸ“” Documentation

    • 🌐 Error in javadoc for o.s.web.servlet.function.ServerResponse #23075
    • πŸ‘ Document @Value support in the reference manual #23052
    • πŸ›  Fix typo #23046

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!

  • v5.2.0.M2

    May 09, 2019

    🍱 ⭐️ New Features

    • 0️⃣ DefaultCacheAwareContextLoaderDelegate should log which application context instance was stored or retrieved from cache #22925
    • 🚦 Replace signal materialization in TransactionAspectSupport with usingWhen #22911
    • πŸ”€ MergedAnnotation meta-data support #22909
    • πŸ‘Œ Support Publisher in MultipartBodyBuilder#asyncPart #22876
    • Consider adding is*Enabled() methods to LogAccessor #22862
    • βž• Add getRoot() to MergedAnnotation #22818
    • πŸ”¦ Expose StompSubProtocolWebSocketHandler metrics #22807
    • Create RSocketRequesterBuilder in spring-messaging #22806
    • Return value doesn't serialize to JSON when return type is Mono of Interface in WebFlux #22803
    • Some trivial optimization in method populateBean() #22792
    • Consistently implement decodeToMono by joining buffers first #22783
    • βž• Add decodeDataBuffer to Decoder and encodeValue to Encoder #22782
    • βž• Add coroutines support to RSocket @MessageMapping and RSocketRequester #22780
    • βž• Add CBOR codec (single value only) #22767
    • βž• Add route(RequestPredicate, HandlerFunction) variant to RouterFunctions builder #22701
    • πŸ– Handle Optional<?> @RequestParam() when generating URL using MvcUriComponentsBuilder #22656
    • βž• Add reactive transaction support SPI #22646
    • πŸ‘ Reactive transaction management support #22590
    • πŸ‘Œ Support constructor injection without @Autowired when using JUnit Jupiter in spring-test #22286
    • βž• Add protected methods to resolve the target type for payload arguments [SPR-17503] #22035
    • πŸ‘ Consumes condition support for optional content [SPR-17478] #22010
    • Consistent error handling when streaming with servlet vs reactive stack [SPR-17440] #21972
    • Create a WebFilter for ServerWebExchange Reactor Context [SPR-17213] #21746
    • πŸ‘‰ Make WebFlux multipart support fully Reactive [SPR-17122] #21659

    🍱 🐞 Bug Fixes

    • πŸ”§ @Configuration(proxyBeanMethods = false) cannot implement ImportAware #22920
    • πŸ›  Fix suspend/resume in AbstractReactiveTransactionManager #22918
    • πŸ›  Fix suspending handler method type handling #22827
    • πŸ”— LinkedCaseInsensitiveMap track removals via keySet, entrySet or values #22821
    • πŸ‘Œ Support suspending functions returning Flow #22820
    • πŸ”— LinkedMultiValueMap.getFirst - check that values is not empty #22421

    πŸ“” Documentation

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium #22930

    🍱 ❀️ Contributors

    πŸš€ We'd like to thank all the contributors who worked on this release!