Spring v5.3.2 Release Notes

Release Date: 2020-12-09 // over 3 years ago
  • 🍱 ⭐ New Features

    • πŸ”§ Refine ConfigurationClassPostProcessor behavior in native images #26236
    • 🌲 Ability to correlate ByteBuf leak records to log messages for a specific request #26230
    • πŸ”§ Avoid CGLIB proxies in websocket/messaging configuration #26227
    • ContentCachingResponseWrapper should not add β€œContent-Length” when β€œTransfer-Encoding” is present #26182
    • πŸ‘ Allow customization of file extension to media type map for WebFlux static resources #26170
    • πŸ”§ Register bean definition dependencies when used via configuration class injected fields #26167
    • πŸ“‡ Print helpful information in RSocket MetadataExtractor #26130
    • βž• Add ResponseSpec#toEntityFlux overload that accepts BodyExtractor #26114
    • Wildcard is a valid Access-Control-Expose-Headers value #26113
    • ⬇️ Reduce overhead of char[] creation #26101
    • EntityManagerFactory startup failure in deferred mode is only available on first use #26093
    • βœ… @DynamicPropertySource is not supported via @NestedTestConfiguration semantics #26091
    • Introduce and() methods in MethodFilter and FieldFilter for composite filters #26063
    • Kotlin extensions for WebClient.ResponseSpec #26030
    • βœ… Validate that JUnit Jupiter test methods and lifecycle methods are not annotated with @Autowired #25966
    • βž• Add support for SSE to WebMvc.fn #25920
    • Template URI Variables with newline %0A or %0D are not matched #23252

    🍱 🐞 Bug Fixes

    • AsyncServerResponse interoperability issue with path variables #26239
    • βœ‚ Remove duplicate "property" in PropertyCacheKey.toString() #26237
    • DataBuffer Leak in Server Response #26232
    • Wrong HttpServletMapping used on INCLUDE in UrlPathHelper.skipServletPathDetermination #26216
    • 🀑 MockMvc ignores MultipartFile registrations when both files and parts are registered #26166
    • cannot resolve ServerRequest::pathVariable in nested RequestPredicate #26163
    • ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26155
    • AbstractServerHttpRequest constructor breaks binary compatibility between 5.2.x and 5.3.x #26151
    • πŸ‘ Refine kotlinx.serialization support #26147
    • MimeType is no longer actually serializable #26127
    • βœ… Resttemplate throws NPE with spring-boot-starter-log4j2 within tests #26120
    • ⚑️ Update default for favorPathExtension to match Javadoc and as intended for 5.3 #26119
    • ⬆️ Spring Boot 2.4 upgrade breaks injection of Principal #26117
    • NoSuchMethodError in UrlPathHelper.skipServletPathDetermination #26112
    • πŸ‘Œ Support allowedOriginPatterns in SockJS config #26108
    • PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26104
    • @Transactional causes casting error for suspending function on Spring MVC #26092
    • 🚚 UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26079
    • ⚑️ NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26071
    • Missing error status handling for toEntityFlux methods in WebClient #26069
    • πŸš€ DataBufferUtils#join may release a DataBuffer more than necessary #26060
    • πŸ‘» FlightRecorderApplicationStartup exception on processing Http Request #26057
    • WebMvc.fn: ServerResponse.async does not handle exceptions as expected #25931
    • Non-compliant Content-Type header for multipart media types #25885
    • πŸ‘€ ResponseEntity Exception Handling Issues #25490

    πŸ“” Documentation

    • Clarify intended advice execution behavior in Spring version 5.2.7+ #26202
    • 0️⃣ DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26134
    • Spring EntityManager proxy is incompatible with Hibernate Search <5.11.6 (FullTextEntityManager instantiation fails with ClassCastException) #26090
    • Null passed in required @RequestParam now fails #26088
    • πŸ”’ Mention security consideration in ForwardedHeaderFilter javadoc #26081
    • βž• Add cron expression documentation #26067
    • ⚑️ Update javax.mail reference to jakarta.mail #25855
    • Mechanism to access request bound objects in WebClient filter in servlet env #25710
    • Document that @Transactional does not propagate to new threads #25439

    ⬆️ πŸ”¨ Dependency Upgrades

    • ⬆️ Upgrade to Kotlin Coroutines 1.4.2 #26226
    • ⬆️ Upgrade to Reactor 2020.0.2 #26176
    • ⬆️ Upgrade to Kotlin 1.4.21 #26132

    🍱 ❀️ Contributors

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


Previous changes from v5.3.1

  • 🍱 ⭐ New Features

    • πŸ”¦ Expose a public method "isClosed" to indicate whether the connection has been closed in WebSocketSession (WebFlux) #26043
    • WebFlux missing programmatic handling of MappingJacksonValue #26035
    • ⚑️ Optimize locking in AspectJProxyFactory for concurrent aspect instantiation #26034
    • ⚑️ Upgrade SpelCompiler bytecode level to 1.8 and optimize for concurrent access #26033
    • πŸ”€ MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26031
    • SpEL doesn't work nicely with records #26029
    • πŸ”Š StompSubProtocolHandler logs failed authentication with error stack trace #26026
    • πŸ”¦ Expose toEntityFlux methods in WebClient.ResponseSpec #26023
    • πŸ‘Œ Improve AdvisedSupport.getAdvisors() #26017
    • πŸ‘Œ Improve URI/query strings sanitization #26012
    • 0️⃣ DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26010
    • 0️⃣ DefaultWebClientBuilder copies references #25992
    • Inefficient request handling inside ServletRequestDataBinder #25986
    • Avoid multiple volatile reads/writes in a row where only one is enough #25899
    • πŸ‘ Allows Jackson2 encoders to log Throwable reason for not being able to serialize or deserialize #25892
    • Mechanism to access request bound objects in WebClient filter in servlet env #25710

    🍱 🐞 Bug Fixes

    • Cannot be cast to class Publisher error with non suspending @Transactional functions #26052
    • πŸ›  Fix wrong reference in UrlPathHelper.removeSemicolonContentInternal() #26050
    • ⏱ setTaskScheduler in StompBrokerRelayRegistration breaks chaining #26049
    • βž• Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26025
    • Autowiring does not work reliably in case of dynamically changing prototype bean class #26019
    • βœ… Order of profiles in tests is not preserved #26004
    • βͺ @Transactional on suspending function returning a value always rollbacks #25998
    • πŸ‘€ SseEmitter: connection closed after first event #25987
    • @Nonnull annotation breaks ServletRequestMethodArgumentResolver for Principal #25981
    • Spring MVC's locale resolver can no longer be customized in parent context #25290

    πŸ“” Documentation

    • πŸ›  Fix kotlin example code which does not compile #26016
    • πŸ›  Fix a broken Asciidoctor syntax in core-resources.adoc #25999

    🍱 ❀️ Contributors

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