Release Notes - Spring Framework - Version 5.0 M5 - HTML format

Bug

  • [SPR-14828] - UriComponentBuilder doesn't work with encoded HTTP URL having '+'.
  • [SPR-15029] - ConcurrentModificationException in AbstractRequestExpectationManager
  • [SPR-15041] - Constant error 416 for a byte-range request with content type application/octet-stream
  • [SPR-15082] - Spring validation crashes with Hibernate Validation 5 style list constraint violations
  • [SPR-15087] - HttpHeaders.keySet() is no longer case-insensitive
  • [SPR-15088] - DefaultRedirectStrategy.sendRedirect with relative URL and ForwardedHeaderFilter add contextpath to URL twice
  • [SPR-15089] - Wrong path to RequestUpgradeStrategies in HandshakeWebSocketService
  • [SPR-15112] - Fix error handling in Jackson2JsonDecoder
  • [SPR-15117] - Can't autowire BiMap: container resolves non-matching Map of value beans
  • [SPR-15123] - Incorrect resolution of ResolvableAttributes when MessageSourceSupport#alwaysUseMessageFormat is true
  • [SPR-15125] - Modification in AbstractAutowireCapableBeanFactory to prevent stackoverflow errors causes context not to load.
  • [SPR-15136] - Reactive RedirectView throws exception if no RequestDataValueProcessor is present
  • [SPR-15140] - @RequestParam injects a raw undecoded string for reactive HTTP requests
  • [SPR-15145] - SimpleApplicationEventMulticaster should not rely on ClassCastException having a message
  • [SPR-15151] - HeaderMethodArgumentResolver doesn't resolve Optional.empty() for non-existing header
  • [SPR-15156] - XmlExpectationsHelper.assertXmlEqual missing "regardless of order" case
  • [SPR-15160] - Collection autowiring does not resolve field-level type variable against containing class
  • [SPR-15166] - InterceptingClientHttpRequest replaces headers set in request factory instead of merging them
  • [SPR-15179] - HiddenHttpMethodFilter may disturb error rendering when handling malformed multipart request
  • [SPR-15186] - InvocableHandlerMethod should call GenericTypeResolver with getBeanType() and only once
  • [SPR-15188] - If backing Cache is down @CacheResult does not seamlessly call method (in contrast to @Cacheable)
  • [SPR-15192] - SpelCompiler VerifyError - Incompatible argument to function
  • [SPR-15194] - Spring does not clean up db connection registered in afterCompletion callback
  • [SPR-15201] - RestTemplate drops trailing / from request URI
  • [SPR-15202] - SettableListenableFuture may be both set and canceled successfully
  • [SPR-15212] - HTTP Response should not contain both Transfer-Encoding and Content-Length headers
  • [SPR-15214] - Principal check in ServletRequestMethodArgumentResolver can result in type mismatches
  • [SPR-15215] - MockHttpServletRequest.getReader() returns null in case of no content
  • [SPR-15216] - SettableListenableFuture may be successfully set with failureCallback executed and success callback ignored
  • [SPR-15231] - DispatcherServlet's multipart request parsing fails during Jetty error dispatch
  • [SPR-15232] - MockHttpServletRequest.protocol default should be "HTTP/1.1", not "http"
  • [SPR-15241] - RestTemplate with Netty produces two Content-Length headers
  • [SPR-15246] - PathPatternParser#parse method failed with java.lang.IndexOutOfBoundsException
  • [SPR-15254] - RestTemplate with MockMvcClientHttpRequestFactory double encodes URIs
  • [SPR-15259] - StringIndexOutOfBoundsException in PathPattern.extractPathWithinPattern
  • [SPR-15261] - HEAD response has "Content-Length: 0" for @RestController @GetMapping methods
  • [SPR-15264] - PathPatternParser matches root path against path variable
  • [SPR-15275] - @Configuration processing fails to handle AbstractFactoryBean.getObject() calls

Improvement

  • [SPR-6568] - Rollback of transaction participating in nested transaction should not enforce rollback of global transaction
  • [SPR-9294] - StandardServletMultipartResolver should support MaxUploadSizeExceededException against common servers
  • [SPR-11590] - TransactionSynchronizationManager - throw an Exception or log a warning if a Synchronization wants to add a Synchronization and afterCompletion is already called
  • [SPR-14503] - Allow configuring the message converter in HttpPutFormContentFilter
  • [SPR-14544] - HTTP request pattern matching refinements
  • [SPR-14550] - Classes with abstract @Lookup methods not registered in case of classpath scanning
  • [SPR-14829] - ContentCachingRequestWrapper can have maxContentLength to limit caching
  • [SPR-14882] - Disable streaming when reading to Resources in RestTemplate
  • [SPR-14954] - Improve nested routes API
  • [SPR-14970] - Simplify options for strict encoding of URI variable when using UriComponentsBuilder
  • [SPR-15064] - Support i18n and nested template loading in ScriptTemplateView render function
  • [SPR-15065] - Provide a Kotlin DSL for the functional Web API
  • [SPR-15068] - xml websockets configuration does not mirror annotation configuration
  • [SPR-15074] - WebFilter ordering in WebHttpHandlerBuilder only works on instances
  • [SPR-15075] - Remove String#toCharArray from ScriptUtils
  • [SPR-15090] - GenericTableMetaDataProvider could use non standard named TableMeta-Schema if only one found
  • [SPR-15091] - Implement MessagingException.toString()
  • [SPR-15094] - Improve performance of StringUtils.capitalize()
  • [SPR-15095] - Possible performance issue in the generation of JSON in Spring Web Reactive
  • [SPR-15096] - Clarify WebContentInterceptor path mappings and efficiently match them
  • [SPR-15098] - Unable to specify factory bean in BeanDefinitionBuilder
  • [SPR-15100] - Upgrade to Kotlin 1.1-beta
  • [SPR-15101] - Netty4ClientHttpRequestFactory should use SNI for TLS connections
  • [SPR-15104] - Add support for JSON Streaming
  • [SPR-15107] - Update MySQLMaxValueIncrementer to not rely on MYISAM
  • [SPR-15109] - Add MimeType and MediaType constants for RSS
  • [SPR-15110] - Add new media types for RFC 7807: Problem Details for HTTP APIs
  • [SPR-15116] - MockHttpServletRequestBuilder should support multiple locales
  • [SPR-15118] - Avoid the need to specify Supplier in Kotlin bean registration API
  • [SPR-15119] - Add Kotlin array-like addAttribute to Model and ModelMap
  • [SPR-15124] - Provide convenient ways to specify query parameters to WebClient
  • [SPR-15126] - Support Gradle-style API for Kotlin bean registration
  • [SPR-15128] - Add bodyToMono<Foo>() and bodyToFlux<Foo>() Kotlin extensions
  • [SPR-15134] - Assign a default order to ResponseStatusExceptionHandler bean created by WebReactiveConfigurationSupport
  • [SPR-15135] - Provide a method that exposes whether or not a reactive HTTP response has been committed
  • [SPR-15139] - org.springframework.messaging.handler.invocation.InvocableHandlerMethod should not mention "controller"
  • [SPR-15142] - MockSessionCookieConfig#maxAge defaults to 0 instead of -1
  • [SPR-15148] - Support DataBuffer as reactive handler method results
  • [SPR-15158] - Add Kotlin idiomatic extensions for JDBC API
  • [SPR-15163] - Improve initialization of org.springframework.tests.Assume
  • [SPR-15168] - MockRestServiceServer should allow for an expectation to never occur.
  • [SPR-15173] - AbstractValueAdaptingCache#toStoreValue should throw an exception if the value is null and allowNulls is false
  • [SPR-15175] - Scheduled/JmsListenerAnnotationBeanPostProcessor free heap space
  • [SPR-15176] - RedirectAttributes Flash scoped variables absent when redirecting using ResponseEntity
  • [SPR-15178] - DispatcherServet.checkMultipart() does not consider javax.servlet.error.exception that has a MultipartException cause
  • [SPR-15180] - Tolerate null return from getNegotiatedExtensions (for Jetty 9.4.1 compatibility)
  • [SPR-15182] - CookieLocaleResolver may disturb error rendering when locale cookie has a malformed value
  • [SPR-15200] - Option to get the remote ip from a ServerWebExchange
  • [SPR-15208] - Improve adding defaults to WebClient requests
  • [SPR-15210] - Support for read-only transactions with Oracle 12c JDBC driver
  • [SPR-15218] - Log failures to load PropertySources when ignoreResourceNotFound = true
  • [SPR-15229] - DefaultSubscriptionRegistry should prevent duplicate Subscriptions per subscription id
  • [SPR-15234] - Update body related options in ClientRequest
  • [SPR-15236] - Expose ResponseCookie map from ClientResponse
  • [SPR-15237] - Use Class.getTypeName() where appropriate
  • [SPR-15238] - Use Map.getOrDefault in AbstractSqlParameterSource.getSqlType
  • [SPR-15249] - WebTestClient assert failures should log request and response details
  • [SPR-15258] - Consistently support CompletionStage next to CompletableFuture
  • [SPR-15262] - MessageHeaderAccessor's MutableMessageHeaders should be serializable

New Feature

  • [SPR-12674] - Support for Servlet 4.0 API
  • [SPR-13820] - Provide MockMvc support for Stateful HttpSession
  • [SPR-14193] - Wildcard mapping for path segments at the end of a @RequestMapping
  • [SPR-14252] - Introduce MockPart in spring-test
  • [SPR-14253] - Support for MockPart in Spring MVC Test
  • [SPR-14590] - Reactive MockMvc equivalent
  • [SPR-15063] - Add a Reactive ScriptTemplateView
  • [SPR-15131] - Support UNSUBSCRIBE for a durable STOMP subscription
  • [SPR-15144] - Functional Web API support for HTML form processing
  • [SPR-15206] - Create reactive HiddenHttpMethodFilter to support alternate mappings

Pruning

  • [SPR-14670] - Drop NativeJdbcExtractor mechanism in favor of java.sql.Connection.unwrap()
  • [SPR-15154] - Drop outdated BeanFactoryLocator / beanRefContext.xml mechanism
  • [SPR-15159] - Remove outdated abstractions/delegates from org.springframework.core/util

Refactoring

  • [SPR-14779] - Provide static type safe methods like Collections.emptyList() for Comparators
  • [SPR-15127] - Remove object wrapper in Kotlin extensions

Task

  • [SPR-14602] - Doc: @Bean methods on @Configuration class returned from another @Bean method do not work
  • [SPR-14711] - Document candidates index mechanism
  • [SPR-14998] - Compatibility with Hibernate Validator 5.4
  • [SPR-15057] - Stylesheets are not being served for JavaDocs pages
  • [SPR-15059] - Add Kotlin ScriptTemplateView tests
  • [SPR-15076] - Remove use of Boolean constructors in tests
  • [SPR-15077] - Avoid use of double constructor of BigDecimal in tests
  • [SPR-15130] - Enable Reactive Jetty's Websocket suspend/resume functionality
  • [SPR-15138] - Upgrade to Gradle 3.3
  • [SPR-15146] - Upgrade to Objenesis 2.5
  • [SPR-15153] - Reference documentation for Groovy bean definition DSL
  • [SPR-15155] - CookieLocaleResolver maxAge documentation wrong
  • [SPR-15162] - Use reactor BOM in Framework build
  • [SPR-15167] - Optional dependencies are missing from the poms of the latest 5.0 snapshots
  • [SPR-15170] - Improve the logging documentation
  • [SPR-15183] - Generate Java 8 bytecode with Kotlin compiler
  • [SPR-15190] - Rename spring-web-reactive to spring-webflux
  • [SPR-15196] - Revisit Assert to avoid single-arg assert methods (with refined messages)
  • [SPR-15203] - Avoid deprecated Reactor Operators call in AbstractListenerReadPublisher
  • [SPR-15207] - Upgrade to Gradle 3.4
  • [SPR-15240] - CronSequenceGenerator examples in documentation are incorrect

Edit/Copy Release Notes

The text area below allows the project release notes to be edited and copied to another document.