Skip to content

@bclozel bclozel released this Dec 3, 2019 · 48 commits to master since this release

⭐️ New Features

  • 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
  • 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
  • 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!

Assets 2
You can’t perform that action at this time.