All Versions
53
Latest Version
Avg Release Cycle
33 days
Latest Release
667 days ago

Changelog History
Page 2

  • v5.2.9.RELEASE Changes

    September 15, 2020

    🍱 ⭐ New Features

    • HttpHeaders.setContentDispositionFormData should ignore empty filename #25769
    • πŸ”§ StringDecoder does not provide a way to configure the default charset #25762
    • πŸ”§ MimeMessageHelper.addAttachment: configurable encoding of attachment filename #25755
    • 🌲 Current log level not checked by LogAccessor supplier-enabled logging methods #25741
    • πŸ‘ PropertiesLoaderSupport should ignore socket/connect exceptions as well #25717
    • Avoid repeated calls to getPathWithinApplication from UrlPathHelper.getLookupPathForRequest #25669
    • πŸ”’ Avoid full singleton lock for DefaultSingletonBeanRegistry.getSingleton(beanName, false) #25667
    • XStreamMarshaller should avoid direct use of CompositeClassLoader which is not exported by XStream in OSGi #25662
    • 🐎 Avoid LinkedList performance issues through use of ArrayDeque #25652
    • Introduce createContext() factory method in AbstractGenericContextLoader #25600
    • πŸ‘• Declare MessagePostProcessor as a @FunctionalInterface #25571
    • πŸ”€ Assert preconditions for MergedAnnotations.from() factory methods #25568
    • Provide access to AbstractRoutingDataSource's resolved target DataSources #25544
    • Possible optimization in UrlResource #25531
    • Refine use of substring operations #25445
    • πŸ”€ Cache abstraction does not log hit / miss for synchronized access #25248

    🍱 🐞 Bug Fixes

    • Issue with Forwarded Header and Multiple Values #25737
    • πŸ“‡ CallMetaDataContext.reconcileParameters overwrites cursor name #25707
    • πŸ‘Œ VerifyErrors when using SpEL compilation with Thymeleaf when invoking a default method defined in an interface #25706
    • SQLErrorCodesFactory.getErrorCodes(DataSource) returns empty error codes if access to transactional connection fails #25681
    • πŸ‘‰ Make "org.springframework.util.unit.DataSize" class Serializable #25675
    • Joda-Time presence check fails to detect Joda-Time 2.x specifically #25655
    • Regression in SimpleThreadScope introduced in 5.2.7 #25618
    • πŸ‘ Potential integer overflow in ExecutorConfigurationSupport.setAwaitTerminationSeconds(int) and AbstractResourceBasedMessageSource.setCacheSeconds(int) #25613
    • βœ‚ Remove session on 4xx response from WebSocket handshake #25608
    • πŸ“‡ spring-jdbc don't set out parameter name from metadata for Postgresql function after issue#25399 #25588
    • FileUrlResource isWritable method returns true if URL protocol is not indicating a file #25584
    • Lazy dependency proxy does not populate bean dependencies #25562
    • ⬆️ Bean creation fails with StackOverflowError after upgrading from 5.1.13 to 5.2.7 #25546
    • StaticListableBeanFactory.isSingleton() returns false for singleton beans #25522
    • 🀑 Standalone MockMvc ignores @RestControllerAdvice annotation attributes #25520
    • 🀑 MockHttpServletResponse reset() does not reset charset field #25501
    • AnnotationTypeMappings does not filter repeatable annotations #25483
    • Wrong error message for type mismatch in jsonPath().value() #25480
    • πŸ›  Fix infinite loop bug in AnnotationScanner #25429
    • Overloaded @Bean method with name mismatch causes bean to be created twice (in case of ASM processing) #25263

    πŸ“” Documentation

    • πŸ— Prevent confusion about build(boolean) method in UriComponentsBuilder #25604
    • Document how to specify Jackson JSON view serialization hints with @RestController and Webflux #25596
    • πŸ”§ Inconsistent log level in @Bean javadoc and ConfigurationClassEnhancer #25590
    • πŸ›  Fix asciidoctor syntax for source #25539
    • πŸ‘Œ Improve Javadoc for @RequestMapping#params #25482
    • Document that SimpleCacheManager requires caches to be initialized when not used as a bean #22988

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR12 #25730

    🍱 ❀️ Contributors

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

  • v5.2.8.RELEASE Changes

    July 21, 2020

    🍱 ⭐ New Features

    • Defer creating logger in StandardWebSocketHandlerAdapter #25427
    • 🚚 MutablePropertySources will not find or remove proxied sources #25369
    • Profiles should be comparable when created via Profiles.of() #25340
    • Avoid re-creating RSocketRequester instance per subscriber #25330
    • Hoist Class.getName() from String concatenation to dodge an issue related to profile pollution #25324
    • πŸ‘Œ Improve Random seed in SocketUtils #25321
    • πŸ‘Œ Support fragments in UriComponentsBuilder.fromHttpUrl() #25300
    • πŸ‘Œ Support for custom cache registration in CaffeineCacheManager #25230
    • Don't get ContentCachingResponseWrapper in ShallowEtagHeaderFilter so that users can extend this wrapper #24976
    • ⏱ Unnecessarily alarming stack trace logged during scheduler resolution #23268
    • πŸ”¦ Expose a setExceptionListener method in DefaultJmsListenerContainerFactory [SPR-17570] #22102

    🍱 🐞 Bug fixes

    • πŸ— UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25423
    • SimpleJdbcCall does not find stored function with PostgreSQL driver 42.2.11 #25399
    • πŸ‘ MappingJackson2HttpMessageConverter might be too specific in its Charset support #25322
    • ReactorNetty websocket issue for multiple clients with different protocols #25315
    • Mutating a ServerHttpRequest breaks the existing context path #25279
    • ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25278
    • βͺ NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25253
    • AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25247
    • The AbstractTemplateViewResolver class is not abstract #25240
    • WebClient: NPE and leak in case connection is reset by server. #25216
    • Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #22972
    • IllegalReferenceCountException happens when the operation was canceled #22594
    • 🚚 DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #22263

    πŸ“” Documentation

    • 0️⃣ Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25402
    • πŸ‘Œ Improve JavaDoc for ConfigurableApplicationContext.refresh() #25380
    • πŸ›  Fix interface and class names in examples in core-aop doc #25351
    • Wording changes #25314
    • πŸ›  Fix typo in Java example for handler class #25302
    • πŸ‘Œ Improve Javadoc for @value regarding supported expressions #25284
    • πŸ›  Fix syntax in validation examples #25251
    • πŸ‘» Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25231

    ⬆️ πŸ”¨ Dependency upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR10 #25376
    • ⬆️ Upgrade to nohttp 0.0.5 #25266

    🍱 ❀️ Contributors

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

  • v5.2.7.RELEASE Changes

    June 09, 2020

    🍱 ⭐ New Features

    • Implement reliable invocation order for advice within an @Aspect #25186
    • 🐎 Performance enhancement in execution of ResponseEntity.of() #25183
    • πŸ‘Œ Support for shared GroovyClassLoader in GroovyScriptFactory #25177
    • Suggest making a Set.size() > 0 judgement for AbstractApplicationContext.earlyApplicationEvents #25161
    • πŸ”§ Make use of custom types configurable in YamlProcessor #25152
    • 0️⃣ Avoid need for default constructor in ContextAnnotationAutowireCandidateResolver subclasses #25131
    • ConstructorResolver.resolveConstructorArguments() return value issue #25130
    • Introduce serializeToByteArray/deserializeFromByteArray convenience methods #25117
    • 🀑 Custom HTTP Method on MockServerHttpRequest #25109
    • Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25088
    • πŸ”€ Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25081
    • πŸ‘ Simplify use of HttpContext in HttpComponentsClientHttpRequestFactory in support of user associated connections #25066
    • ResolvableType forClass fails when a type in the generic signature isn't present #25064
    • 🌲 Include timeout unit in shutdown failure logging #25058
    • ⬇️ Drop unnecessary intermediate StringBuilder.toString() call in ServerSentEventHttpMessageReader #25024
    • πŸ›  Fix concurrency issues in XStreamMarshaller #25017
    • Introduce mechanism to discover whether a reactive type registered in ReactiveAdapterRegistry uses deferred computation #24995
    • 🌲 Avoid logging exception for closed session in AbstractSockJsSession #24986
    • πŸ‘» Include response body in RestTemplate exception when there is no suitable HttpMessageConverter #24964

    🍱 🐞 Bug Fixes

    • ExchangeStrategies custom codec's reader & writer are not registered #25149
    • MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25140
    • πŸ‘» WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25132
    • πŸ”€ Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25110
    • πŸ— DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25106
    • πŸ›  Fix race condition in WriteResultPublisher between subscription and error in publishError #25096
    • Jackson message converters and codecs do not respect character encoding in canRead/canWrite #25076
    • 0️⃣ DefaultClientResponseBuilder empty logPrefix when creating a DefaultClientResponse based on another #25069
    • HttpHeaders equals may return false without comparing actual content #25034
    • πŸ›  Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #24989

    πŸ“” Documentation

    • Javadoc for hibernate5 OpenSessionInViewFilter mentions FlushMode.NEVER #25158
    • Document that the Map backing a MapPropertySource should not contain null values #25142
    • ⚑️ Javadoc for JdbcOperations.batchUpdate should mention that negative values are possible #25138
    • πŸ›  Fix URI pattern example in webflux.adoc #25137
    • Document how reactive transactions work for cancellation in 5.2 and how it will work in 5.3 #25091
    • πŸ‘€ Document whether code can rely on specific subclasses of HttpClientErrorException/HttpServerErrorException being thrown from DefaultResponseErrorHandler #25067
    • πŸ›  Fix SpelEvaluationException with example code #25045
    • 🚚 javadoc: remove a comment documented a limitation on @Lookup annotation #25044
    • Document all predefined variables from ApplicationContext available in SpEL expressions #25037
    • πŸ‘ Document ReactiveTransactionManager support in reference manual #25036
    • πŸ‘ Document ReactiveTransactionManager support #25030
    • πŸ”„ Change to placeholder value in XML is not reevaluated at runtime #25022
    • βž• Add missing @PathVariable declarations in examples in webmvc.adoc #25006

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Reactor Dysprosium-SR8 #25210

    🍱 ❀️ Contributors

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

  • v5.2.6.RELEASE Changes

    April 28, 2020

    🍱 ⭐ New Features

    • Cache meta-annotations for stereotype check in AnnotationBeanNameGenerator #24980
    • ⬆️ Use WebsocketServerSpec in ReactorNettyRequestUpgradeStrategy #24959
    • Warn about unsupported "/path/**/other" patterns with WebFlux PathPatternParser #24958
    • πŸ‘ Allow override of data binding in ModelAttributeMethodArgumentResolver #24947
    • Rid pointless wrapping with BufferedInputStream from class reading #24946
    • ResponseStatusExceptionResolver ignores ResponseStatusException headers #24944
    • πŸ“‡ Caching of autowire candidate metadata for lazy beans #24904
    • 0️⃣ Put a limit on the size of DefaultSingletonBeanRegistry#suppressedExceptions #24902
    • Prevent setting parent bean factory to self #24900
    • 0️⃣ Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24871
    • πŸ‘Œ Improve performance of StringUtils.deleteAny() #24870
    • 'args' argument of 'JdbcTemplate#query(String, Object[], RowCallbackHandler)' method should be marked @Nullable #24839
    • πŸ‘Œ Improve usage of ByteArrayOutputStream/ByteArrayInputStream #24805
    • Simplify conversion of ByteArrayOutputStream to String #24785
    • ⚑️ Optimize sortPostProcessors() in PostProcessorRegistrationDelegate #24776
    • ⬇️ Reduce byte array allocations in StompEncoder #24694

    🍱 🐞 Bug Fixes

    • ConflictingBeanDefinitionException on repeated index evaluation #24978
    • Reintroduce synthesized annotation attribute value caching #24970
    • 🀑 MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24916
    • Memory leak in MimeTypeUtils LRUCache #24886
    • Annotation searches potentially synthesize annotations unnecessarily #24861
    • Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24853
    • 0️⃣ DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24852
    • Cannot dispatch without an AsyncContext when an expected error is thrown #24835
    • Duplicate Vary headers after enabling CORS filter #24829
    • πŸ‘‰ Make it possible to run Spring MVC without kotlin-reflect #24828
    • Recursively copy directory with symbolic link #24823
    • Connection leak with WebClient retrieve().toBodilessEntity() #24788
    • πŸ‘― Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24782
    • πŸ›  Fix empty domain handling in ResponseCookie #24758
    • ⚠ Illegal reflective access warning for interface-based lookup method injection #24657
    • 🐎 Annotation retrieval performance degradation after 5.2 #23905

    πŸ“” Documentation

    • HttpHeaders#getETagValuesAsList(String) does not document IAE #24950
    • πŸ‘ Describe that bean disposal is unsupported for the beans created by FactoryBean #24948
    • πŸ”€ Deprecate AnnotationFilter.NONE (since MergedAnnotations always filters java.lang.* annotations) #24932
    • πŸ‘Œ Improve Javadoc #24908
    • πŸ›  Fix Javadoc in PathPattern #24841
    • 0️⃣ Document default constructor as fallback for multiple non-@Autowired constructors #24838
    • Document precedence for @DynamicPropertySource #24837
    • πŸ“š Documentation: AbstractBeanDefinition.getBeanClass() vs BeanFactory.getType #24816
    • πŸ›  Fix typos and improve readability in Webflux documentation #24781
    • Document role of views within Spring application #24777
    • πŸ—„ Clarify how to avoid favoring path extensions as well as deprecation warnings #24642

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to RSocket 1.0 RC7 #24934
    • ⬆️ Upgrade to Reactor Dysprosium-SR7 #24892

    🍱 ❀️ Contributors

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

  • v5.2.5.RELEASE Changes

    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 Changes

    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 Changes

    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 Changes

    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 Changes

    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