Skip to content

Releases: spring-projects/spring-framework

4.3.10 Release

17 Jan 14:21
Compare
Choose a tag to compare

⭐ New Features

  • Ignore (Auto)Closeable for interface-based proxy decision [SPR-15779] #20334
  • Bean factory method collision with configuration class name gives unclear error message [SPR-15775] #20330
  • CustomizableTraceInterceptor should allow INVOCATION_TIME placeholder in setExceptionMessage and make stack trace logging configurable [SPR-15763] #20318
  • LinkedCaseInsensitiveMap cannot access locale from subclass [SPR-15752] #20307
  • ForwardedHeaderFilter should expose option for not converting relative redirects to absolute ones [SPR-15717] #20273
  • AbstractValueAdaptingCache does not allow for flexible null value serialization [SPR-15693] #20252
  • Fine-tune HTTP/RMI Invoker exception handling [SPR-15684] #20243
  • Support CachingHttpAsyncClient from httpasyncclient-cache in HttpComponentsAsyncClientHttpRequestFactory [SPR-15664] #20223
  • Cron expression validation method in CronSequenceGenerator improved [SPR-15604] #20163
  • Upgrade to Objenesis 2.6 for Google App Engine Standard on Java 8 and for better JDK 9 support [SPR-15600] #20159

🪲 Bug Fixes

  • UriUtils.extractFileExtension() does not properly handle all fragments [SPR-15786] #20341
  • PropertyOrFieldReference invalidly reuses cached PropertyAccessor [SPR-15769] #20324
  • ClassCastException during deserialization of ScopedObject [SPR-15766] #20321
  • AbstractJackson2HttpMessageConverter throws exception if log level is ERROR [SPR-15760] #20315
  • ReflectionTestUtils accidentally requires spring-aop on the classpath [SPR-15757] #20312
  • MockMvc duplicates PUT Parameter value [SPR-15753] #20308
  • JSP tags doesn't pick up JSTL-defined time zone at page level [SPR-15746] #20302
  • JMS Integration with Tibco causes deadlock while using DefaultMessageListenerContainer [SPR-15738] #20294
  • Memory Leak due to not pruning factoryBeanObjectCache when closing the ApplicationContext [SPR-15722] #20278
  • WebAsyncManager is not compatible with the crosscontext mode [SPR-15709] #20266
  • Netty4ClientHttpRequest does not include port along with host [SPR-15706] #20263
  • @EventListener's 'condition' doesn't work as expected with proxied beans [SPR-15678] #20237
  • SimpleRequestExpectationManager fails with sequential calls with different count [SPR-15672] #20231

5.0 RC2 Release

17 Jan 14:18
Compare
Choose a tag to compare

⭐ New Features

  • Expose structured request path from ServerHttpRequest in WebFlux [SPR-15648] #20207
  • add EditorConfig file, help to unified code style [SPR-15644] #20203
  • Use undecoded path for request mapping in WebFlux [SPR-15640] #20199
  • Favor query parameters for content negotiation in WebFlux [SPR-15639] #20198
  • Use lambda to refact the code [SPR-15637] #20196
  • Replace ResolvableType with ParameterizedTypeReference in WebFlux APIs used in applications [SPR-15636] #20195
  • ClientRequest needs way to set header, overriding current values [SPR-15635] #20194
  • Refact iterator of Map with Java8's Map.forEach [SPR-15631] #20190
  • Use the diamond syntax, remove the type declarations [SPR-15628] #20187
  • Use Map.forEach instead of Map.entrySet().forEach [SPR-15627] #20186
  • Provide support for Kotlin KClasses in WebTestClient API [SPR-15622] #20181
  • Make SystemEnvironmentPropertySource.resolvePropertyName protected [SPR-15617] #20176
  • UriUtils.encode* methods needs to use Charset instance. [SPR-15613] #20172
  • Replace ParsingPathMatcher with PathPattern registry [SPR-15608] #20167
  • Improve support for 0...n UnaryOperator to ExchangeMutatorWebFilter [SPR-15599] #20158
  • GenericMessagingTemplate - add overloaded doReceive() for dynamic receiveTimeout [SPR-15591] #20150
  • Provide access to the unexpanded URI template when using WebTestClient [SPR-15589] #20148
  • Add support to WebTestClient for consuming the ExchangeResult [SPR-15587] #20146
  • Need to adjust code in Spring Framework to allow compilation by Eclipse 4.7 compiler [SPR-15586] #20145
  • HandlerStrategies should use Lists instead of Streams [SPR-15578] #20137
  • Support missing properties from Content-Disposition spec [SPR-15555] #20114
  • Add ability to get the Principal to RouterFunctions [SPR-15552] #20111
  • ProtobufHttpMessageConverter: Make JSON format configurable [SPR-15550] #20109
  • RestTemplate is missing "Typed" error handler. [SPR-15544] #20103
  • Introduce null-safety of Spring Framework API [SPR-15540] #20099
  • Consider reordering of RequestUpgradeStrategy detection in HandshakeWebSocketService [SPR-15539] #20098
  • Revisit DispatcherHandler integration for RouterFunctions [SPR-15536] #20095
  • Simplify adding ResponseCookie to ServerHttpResponse [SPR-15523] #20082
  • Update Cookie headers in MockServerHttpRequest and Response [SPR-15522] #20081
  • Defer logic in DefaultWebFilter.filter [SPR-15520] #20079
  • Support WebFilter in RouterFunctions.toHttpHandler [SPR-15518] #20077
  • Consider making DefaultWebFilterChain not change state [SPR-15517] #20076
  • RequestPartMethodArgumentResolver in WebFlux does not support decoding (e.g. to JSON) the content of a part [SPR-15515] #20074
  • Make it possible to pass method and URL to ResponseErrorHandler [SPR-15511] #20070
  • Consider Renaming request-id [SPR-15501] #20060
  • Parse request path only once during routing [SPR-15397] #19960
  • Introduce a LocaleContextResolver abstraction in WebFlux [SPR-15036] #19602
  • spring.ftl doesn't work on freemarker 2.3.24+'s auto escaping feature [SPR-14740] #19306

🪲 Bug Fixes

  • JdkDynamicAopProxy constructs ReflectiveMethodInvocation with EmptyTargetSource.EMPTY_TARGET for static methods [SPR-15651] #20210
  • Dramatic performance degradation on writing to DefaultDataBuffer after filling the initial capacity [SPR-15647] #20206
  • NPE in AnnotationUtils.getValue [SPR-15642] #20201
  • Protect DataSourceUtils#getConnection(DataSource) against null from DataSource [SPR-15641] #20200
  • Spring Webflux: ServerRequest.queryParam() throws NullPointerException for a query parameter without "=" [SPR-15609] #20168
  • Spring WebFlux fails with 500 if Accept-Language is set to an empty string [SPR-15603] #20162
  • PathPattern "/{foo}.*" should be more specific than "/{foo}" [SPR-15597] #20156
  • Make more obvious when WebTestClient exchangeMutator will not work [SPR-15570] #20129
  • DDoS Spring 5 RouterFunction apps [SPR-15560] #20119
  • {*...} pattern does not work on handler method [SPR-15558] #20117
  • webflux handler fails in case invalid method was requested [SPR-15545] #20104
  • When using ParsingPathMatcher in MVC user should not have to also explicitly set suffix matching [SPR-15303] #19868
  • Spring WebFlux doesn't handle redirect: directives when media type is requested [SPR-15291] #19857

4.3.9 Release

17 Jan 14:21
Compare
Choose a tag to compare

⭐ New Features

  • ForwardedHeaderFilter should provide option to "remove" forwarded headers without using them [SPR-15610] #20169
  • Optimize DefaultUserDestinationResolver.resolveDestination() [SPR-15602] #20161
  • Inefficient use of keySet operators in messaging classes [SPR-15553] #20112
  • Increase log level in ExceptionWebSocketHandlerDecorator [SPR-15537] #20096
  • UriComponentsBuilder's fromHttpRequest uses server port as host port when handling the Forwarded header [SPR-15504] #20063
  • Also clear SerializableTypeWrapper when ResolvableType cache is cleared [SPR-15503] #20062
  • Defer StringHttpMessageConverter Charset.availableCharsets() call [SPR-15502] #20061
  • Allow for HttpOnly cookie result matcher [SPR-15488] #20048
  • Add getTargetCache to TransactionAwareCacheDecorator [SPR-15479] #20039
  • Optimize AntPathMatcher when checking for potential matches [SPR-15477] #20037
  • Lazily initialize Environment in GenericFilterBean (aligned with HttpServletBean) [SPR-15469] #20029
  • Honor @Autowired(required=false) at parameter level, as an alternative to java.util.Optional [SPR-15268] #19833

🪲 Bug Fixes

  • AbstractMethodError when calling validated method of MethodValidationPostProcessor is using a @Lazy validator [SPR-15629] #20188
  • Poor diagnostics when Jackson cannot deserialise an application/json payload due to a missing deserialiser [SPR-15582] #20141
  • Consistently accept "taskExecutor" bean of type Executor (as stated in @EnableAsync's javadoc) [SPR-15566] #20125
  • LocalValidatorFactoryBean does not support unwrap for native ValidatorFactory [SPR-15561] #20120
  • Multipart range requests leave file handles open [SPR-15559] #20118
  • o/s/mail/javamail mime.types has duplicate image/jpeg entries [SPR-15557] #20116
  • ResourceUtils.extractArchiveURL fails to work under Tomcat 8.0.41 with unpackWARs=false [SPR-15556] #20115
  • o/s/mail/javamail mime.types PNG mapped to image/x-png [SPR-15546] #20105
  • DefaultSubscriptionRegistry should prevent duplicate subscription id in accessCache [SPR-15543] #20102
  • WebJarsResourceResolver: multiple matches in case of multiple files with the same name in the same webjar [SPR-15526] #20085
  • HandlerExecutionChain toString() may miss interceptors [SPR-15525] #20084
  • "Not a setter" exception cannot be be thrown in Property.java [SPR-15507] #20066
  • AbstractFlashMapManager.isFlashMapForRequest does not inspect forwarded request coherently [SPR-15505] #20064
  • Deceptive error message in Spring Test ModelResultMatchers [SPR-15487] #20047
  • Last modified check of Resource created from Tomcat war:file: URL fails with FileNotFoundException [SPR-15485] #20045
  • AnnotationUtils.getValue() may hide relevant errors [SPR-15481] #20041

📔 Documentation

  • Improve docs around the use of "Forwarded" and "X-Forwarded-*" headers [SPR-15612] #20171
  • What's new section in 4.3.x reference should have introductory paragraphs [SPR-15585] #20144
  • Doc: Typo in ResponseBodyAdvice class description [SPR-15466] #20026

5.0 RC1 Release

17 Jan 14:18
Compare
Choose a tag to compare

⭐ New Features

  • Consider adding originalMessage to ErrorMessage [SPR-15459] #22193
  • Unable to emulate upload filename browser behaviour with RestTemplate [SPR-15538] #20097
  • Cache spring.factories loads [SPR-15509] #20068
  • Improve 500 error handling and reporting in WebFlux [SPR-15506] #20065
  • WebTestClient Support WebFilter only [SPR-15499] #20058
  • WebTestClient should support custom HandlerMethodArgumentResolver [SPR-15495] #20055
  • Support resolving Mono & Mono [SPR-15494] #20054
  • Revisit handling of 4xx and 5xx status codes in WebClient [SPR-15486] #20046
  • Expose Jackson2CodecSupport mime types for custom override [SPR-15474] #20034
  • Support RequestMappingHandlerMapping registrations in the StandaloneMockMvcBuilder setup [SPR-15472] #20032
  • Align WebMvcConfigurer with WebFluxConfigurer in terms of default methods [SPR-15465] #20025
  • WebFlux should support Flux<?> and Flux rendering [SPR-15464] #20024
  • Configure default settings for Servlet async request timeout for WebFlux [SPR-15463] #20023
  • Add body(Object) method to ServerResponse.BodyBuilder [SPR-15461] #20021
  • Move RxNetty support in test scope [SPR-15444] #20005
  • Use ClientCodecConfigurer in ExchangeStrategies [SPR-15435] #19996
  • Add "use" in Spring API documentation (Javadoc) [SPR-15427] #19988
  • Add Consumer response body asssertions to WebTestClient [SPR-15421] #19982
  • Add JSON content and JsonPath options to WebTestClient [SPR-15420] #19981
  • Allow for single-pass matching in PathPattern [SPR-15419] #19980
  • Functional bean dependencies tracking [SPR-15417] #19979
  • JmsListener should allow delivery mode on response [SPR-15408] #19971
  • Consider error handling strategy and support for WebClient [SPR-15403] #19966
  • Deprecate AsyncRestTemplate in favour of WebClient [SPR-15399] #19962
  • Refactor WebClient to not allow request body for GET/HEAD/etc [SPR-15394] #19957
  • Support for @Order on nested configuration classes [SPR-15384] #19947
  • Support server-side HttpMessage[Reader|Writer] in WebFlux fn [SPR-15370] #19934
  • Resolve async attributes in View hierarchy instead of ViewResolutionResultHandler [SPR-15368] #19932
  • Improve support for fixed content type in ContentNegotiationManager [SPR-15367] #19931
  • Support for reactive types in return values from Spring MVC controllers [SPR-15365] #19929
  • Documentation for WebFlux fn [SPR-15362] #19925
  • Return 5xx/4xx status code and print the reason in logs for CodecException [SPR-15355] #19918
  • Simplify creating ServerWebExchange for testing [SPR-15350] #19913
  • WebTestClient Support WebFilter [SPR-15349] #19912
  • Support testing WebFilterChain [SPR-15348] #19911
  • Support ResponseStatusException in WebFlux functional [SPR-15344] #19907
  • Make SpringExtension.getApplicationContext() public [SPR-15340] #19903
  • Add PathPattern method that gives remaining path given a match [SPR-15336] #19899
  • Cannot test finite SSE because converters are registered in a funny order [SPR-15331] #19894
  • Improve error reporting on method arguments that don't support reactive types [SPR-15297] #19862
  • Simplify access to request/response object in WebClient [SPR-15294] #19860
  • Introduce ServerResponse Kotlin extensions [SPR-15293] #19859
  • Polish Kotlin routing DSL [SPR-15292] #19858
  • Use Java 8 getDeclaredAnnotation method in AnnotationUtils [SPR-15287] #19853
  • Reliably detect @Cacheable declarations on interface methods [SPR-15271] #19836
  • Add option for trailing separator matching in PathPatternParser [SPR-15260] #19825
  • WebTestClient support for initializing the MockServerHttpRequest [SPR-15250] #19815
  • Customizable Jackson ObjectMapper in WebFluxConfigurationSupport [SPR-15247] #19812
  • Avoid creating thread pool in WebSocket Java config when SockJS not used [SPR-15233] #19798
  • Update Cookie headers in MockHttpServletRequest and Response [SPR-15225] #19790
  • Controller API for HTML rendering in WebFlux [SPR-15211] #19775
  • Mock MVC / RequestBuilder should handle Accept-Language header appropriately [SPR-15209] #19773
  • Data binding with immutable objects (Kotlin / Lombok / @ConstructorProperties) [SPR-15199] #19763
  • Print session attributes in PrintingResultHandler in Spring MVC Test [SPR-15189] #19755
  • MockMvcClientHttpRequestFactory should implement AsyncClientHttpRequestFactory as well [SPR-15181] #19747
  • Support for @ControllerAdvice on the reactive side [SPR-15132] #19698
  • Cglib proxy not working with @Async if there is another interceptor [SPR-14949] #19516
  • Support for Jackson 2.9 [SPR-14925] #19492
  • Support for JSON Binding API (JSON-B) [SPR-14923] #19490
  • Reactive type support in org.springframework.core.Conventions [SPR-14915] #19482
  • Reactive multipart request support [SPR-14546] #19114
  • CGLIB proxies should still consider @Transactional annotations on interface methods [SPR-14322] #18894
  • 🪲 Bug Fixes

    • NPE thrown by WriteResultPublisher$State$2.publishComplete caused by a thread-safety issue [SPR-15418] #22192
    • ISE is thrown when the client disconnects while the server is still sending the response [SPR-15412] #22191
    • ResponseStatusException should allow to construct an instance without a reason [SPR-15524] #20083
    • ResponseEntity<Flux<?>> causes Jackson binding exception [SPR-15478] #20038
    • ServerResponse.BodyBuilder.body(Object) shadows body(Publisher) in Kotlin ServerResponseExtensions [SPR-15467] #20027
    • Spel Expressions leaks...
Read more

4.3.8 Release

17 Jan 14:21
Compare
Choose a tag to compare

⭐ New Features

  • Make SessionLocaleResolver's attribute name configurable [SPR-15450] #20011
  • Add constructor to ShadowingClassLoader to create an instance without default excludes [SPR-15439] #20000
  • Improve performance of StringUtils.replace() if pattern is not found [SPR-15430] #19991
  • Revise AcceptHeaderLocaleResolver default locale handling [SPR-15426] #19987
  • Minimize reflective interaction with annotation instances during retrieval [SPR-15387] #19950
  • Spring JDBC not correctly processing Postgresql ?| and ?& operator [SPR-15382] #19945
  • Make it easier to see the HTTP headers when debugging MockMvc-based tests [SPR-15375] #19939
  • GenericCallMetaDataProvider should not treat 'NULLABLE' column as boolean (for compatibility with latest Postgres driver) [SPR-15333] #19896
  • DefaultResponseErrorHandler should have its methods protected [SPR-15329] #19892
  • JRubyScriptFactory compatibility with JRuby 9.1.7+ [SPR-15322] #19885
  • Support for HtmlUnit 2.25+ [SPR-15319] #19882
  • Support for @Lookup methods within @Configuration classes [SPR-15316] #19879
  • sockjs heartbeat failure logged at ERROR level [SPR-15307] #19871
  • Session-scoped bean should have its state propagated to the HttpSession at the end of its initial request (even without further access) [SPR-15300] #19865
  • StandardMultipartFile.transferTo should fall back to manual copy if Part.write doesn't support absolute locations (e.g. on Jetty) [SPR-15257] #19822
  • Avoid re-retrieval of @ResponseStatus annotation for each request [SPR-15227] #19792

🪲 Bug Fixes

  • ApplicationListener potentially invoked twice in circular reference with proxy [SPR-15452] #20013
  • When setting spring.freemarker.template-loader-path to an s3 bucket, the SpringTemplateLoader is not selected [SPR-15445] #20006
  • AbstractRecursiveAnnotationVisitor can't access a package protected enum value [SPR-15442] #20003
  • UnknownHostException not accepted as "resource not found" anymore [SPR-15433] #19994
  • ForwardedHeaderFilter.ForwardedHeaderRequestWrapper does not preserve ; [SPR-15428] #19989
  • ForwardedHeaderRequestWrapper should return a new StringBuffer instance on each invocation of the getRequestURL method [SPR-15423] #19984
  • ForwardedHeaderFilter.ForwardedHeaderRequestWrapper does not preserve encoding of requestURI [SPR-15422] #19983
  • UrlResource getFilename should not contain query parameters [SPR-15411] #19974
  • SettableListenableFuture setException is inconsistent with callbacks under race [SPR-15409] #19972
  • NullPointerException can happen in HttpRequestMethodNotSupportedException.getSupportedHttpMethods() [SPR-15377] #19941
  • VersionResourceResolver does not delegate path resolution to the chain [SPR-15372] #19936
  • PathMatchingResourcePatternResolver fails to work under Tomcat 8.0.41 with unpackWARs=false [SPR-15332] #19895

📔 Documentation

  • Cache Abstraction: Improve unless condition with optional [SPR-15449] #20010
  • SpEL examples in chapter "Cache Abstraction" [SPR-15448] #20009
  • [doc] Update @ControllerAdvice Javadoc to discuss ordering [SPR-15432] #19993

4.3.7 Release

17 Jan 14:21
Compare
Choose a tag to compare

⭐ New Features

  • Skip transaction/caching metadata retrieval for java.lang.Object methods [SPR-15296] #19861
  • MessageHeaderAccessor's MutableMessageHeaders should be serializable [SPR-15262] #19827
  • Consistently support CompletionStage next to CompletableFuture [SPR-15258] #19823
  • Database.SQL_SERVER should set more recent Hibernate dialect with Spring 4.3.x [SPR-15255] #19820
  • Allow configuring the ContentNegotiationManager in MockMVC standalone controller setup [SPR-15248] #19813
  • DefaultSubscriptionRegistry should prevent duplicate Subscriptions per subscription id [SPR-15229] #19794
  • Log failures to load PropertySources when ignoreResourceNotFound = true [SPR-15218] #19783
  • Support for read-only transactions with Oracle 12c JDBC driver [SPR-15210] #19774
  • TransactionSynchronizationManager - throw an Exception or log a warning if a Synchronization wants to add a Synchronization and afterCompletion is already called [SPR-11590] #16214

🪲 Bug Fixes

  • @Configuration processing fails to handle AbstractFactoryBean.getObject() calls [SPR-15275] #19840
  • HEAD response has "Content-Length: 0" for @RestController @GetMapping methods [SPR-15261] #19826
  • RestTemplate with MockMvcClientHttpRequestFactory double encodes URIs [SPR-15254] #19819
  • RestTemplate with Netty produces two Content-Length headers [SPR-15241] #19806
  • MockHttpServletRequest.protocol default should be "HTTP/1.1", not "http" [SPR-15232] #19797
  • DispatcherServlet's multipart request parsing fails during Jetty error dispatch [SPR-15231] #19796
  • SettableListenableFuture may be successfully set with failureCallback executed and success callback ignored [SPR-15216] #19781
  • MockHttpServletRequest.getReader() returns null in case of no content [SPR-15215] #19780
  • Principal check in ServletRequestMethodArgumentResolver can result in type mismatches [SPR-15214] #19779
  • HTTP Response should not contain both Transfer-Encoding and Content-Length headers [SPR-15212] #19776
  • SettableListenableFuture may be both set and canceled successfully [SPR-15202] #19766
  • Spring does not clean up db connection registered in afterCompletion callback [SPR-15194] #19759
  • SpelCompiler VerifyError - Incompatible argument to function [SPR-15192] #19758
  • If backing Cache is down @CacheResult does not seamlessly call method (in contrast to @Cacheable) [SPR-15188] #19754
  • InterceptingClientHttpRequest replaces headers set in request factory instead of merging them [SPR-15166] #19732

📔 Documentation

  • CronSequenceGenerator examples in documentation are incorrect [SPR-15240] #19805

5.0 M5 Release

17 Jan 14:18
Compare
Choose a tag to compare

⭐ New Features

  • WebTestClient assert failures should log request and response details [SPR-15249] #19814
  • Use Map.getOrDefault in AbstractSqlParameterSource.getSqlType [SPR-15238] #19803
  • Use Class.getTypeName() where appropriate [SPR-15237] #19802
  • Expose ResponseCookie map from ClientResponse [SPR-15236] #19801
  • Update body related options in ClientRequest [SPR-15234] #19799
  • Improve adding defaults to WebClient requests [SPR-15208] #19772
  • Create reactive HiddenHttpMethodFilter to support alternate mappings [SPR-15206] #19770
  • Option to get the remote ip from a ServerWebExchange [SPR-15200] #19764
  • RedirectAttributes Flash scoped variables absent when redirecting using ResponseEntity [SPR-15176] #19742
  • AbstractValueAdaptingCache#toStoreValue should throw an exception if the value is null and allowNulls is false [SPR-15173] #19739
  • Improve initialization of org.springframework.tests.Assume [SPR-15163] #19729
  • Add Kotlin idiomatic extensions for JDBC API [SPR-15158] #19724
  • Support DataBuffer as reactive handler method results [SPR-15148] #19714
  • Functional Web API support for HTML form processing [SPR-15144] #19710
  • Provide a method that exposes whether or not a reactive HTTP response has been committed [SPR-15135] #19701
  • Assign a default order to ResponseStatusExceptionHandler bean created by WebReactiveConfigurationSupport [SPR-15134] #19700
  • Support UNSUBSCRIBE for a durable STOMP subscription [SPR-15131] #19697
  • Add bodyToMono() and bodyToFlux() Kotlin extensions [SPR-15128] #19695
  • Support Gradle-style API for Kotlin bean registration [SPR-15126] #19693
  • Provide convenient ways to specify query parameters to WebClient [SPR-15124] #19691
  • Add Kotlin array-like addAttribute to Model and ModelMap [SPR-15119] #19686
  • Avoid the need to specify Supplier in Kotlin bean registration API [SPR-15118] #19685
  • Add new media types for RFC 7807: Problem Details for HTTP APIs [SPR-15110] #19677
  • Add support for JSON Streaming [SPR-15104] #19671
  • Upgrade to Kotlin 1.1-beta [SPR-15100] #19667
  • Possible performance issue in the generation of JSON in Spring Web Reactive [SPR-15095] #19662
  • WebFilter ordering in WebHttpHandlerBuilder only works on instances [SPR-15074] #19640
  • Provide a Kotlin DSL for the functional Web API [SPR-15065] #19631
  • Support i18n and nested template loading in ScriptTemplateView render function [SPR-15064] #19630
  • Add a Reactive ScriptTemplateView [SPR-15063] #19629
  • Simplify options for strict encoding of URI variable when using UriComponentsBuilder [SPR-14970] #19536
  • Improve nested routes API [SPR-14954] #19521
  • Disable streaming when reading to Resources in RestTemplate [SPR-14882] #19448
  • Reactive MockMvc equivalent [SPR-14590] #19159
  • HTTP request pattern matching refinements [SPR-14544] #19112
  • Support for MockPart in Spring MVC Test [SPR-14253] #18826
  • Introduce MockPart in spring-test [SPR-14252] #18825
  • Wildcard mapping for path segments at the end of a @RequestMapping [SPR-14193] #18766
  • Provide MockMvc support for Stateful HttpSession [SPR-13820] #18393
  • Support for Servlet 4.0 API [SPR-12674] #17273
  • StandardServletMultipartResolver should support MaxUploadSizeExceededException against common servers [SPR-9294] #13932
  • Rollback of transaction participating in nested transaction should not enforce rollback of global transaction [SPR-6568] #11234

🪲 Bug Fixes

  • PathPatternParser matches root path against path variable [SPR-15264] #19829
  • StringIndexOutOfBoundsException in PathPattern.extractPathWithinPattern [SPR-15259] #19824
  • PathPatternParser#parse method failed with java.lang.IndexOutOfBoundsException [SPR-15246] #19811
  • RestTemplate drops trailing / from request URI [SPR-15201] #19765
  • XmlExpectationsHelper.assertXmlEqual missing "regardless of order" case [SPR-15156] #19722
  • @RequestParam injects a raw undecoded string for reactive HTTP requests [SPR-15140] #19706
  • Reactive RedirectView throws exception if no RequestDataValueProcessor is present [SPR-15136] #19702
  • Fix error handling in Jackson2JsonDecoder [SPR-15112] #19679
  • Wrong path to RequestUpgradeStrategies in HandshakeWebSocketService [SPR-15089] #19655
  • HttpHeaders.keySet() is no longer case-insensitive [SPR-15087] #19653
  • UriComponentBuilder doesn't work with encoded HTTP URL having '+'. [SPR-14828] #19394

4.3.6 Release

17 Jan 14:22
Compare
Choose a tag to compare

⭐ New Features

  • CookieLocaleResolver may disturb error rendering when locale cookie has a malformed value [SPR-15182] #19748
  • Tolerate null return from getNegotiatedExtensions (for Jetty 9.4.1 compatibility) [SPR-15180] #19746
  • DispatcherServet.checkMultipart() does not consider javax.servlet.error.exception that has a MultipartException cause [SPR-15178] #19744
  • Scheduled/JmsListenerAnnotationBeanPostProcessor free heap space [SPR-15175] #19741
  • MockRestServiceServer should allow for an expectation to never occur. [SPR-15168] #19734
  • MockSessionCookieConfig#maxAge defaults to 0 instead of -1 [SPR-15142] #19708
  • org.springframework.messaging.handler.invocation.InvocableHandlerMethod should not mention "controller" [SPR-15139] #19705
  • MockHttpServletRequestBuilder should support multiple locales [SPR-15116] #19683
  • Add MimeType and MediaType constants for RSS [SPR-15109] #19676
  • Update MySQLMaxValueIncrementer to not rely on MYISAM [SPR-15107] #19674
  • Netty4ClientHttpRequestFactory should use SNI for TLS connections [SPR-15101] #19668
  • Unable to specify factory bean in BeanDefinitionBuilder [SPR-15098] #19665
  • Clarify WebContentInterceptor path mappings and efficiently match them [SPR-15096] #19663
  • Improve performance of StringUtils.capitalize() [SPR-15094] #19661
  • Implement MessagingException.toString() [SPR-15091] #19657
  • GenericTableMetaDataProvider could use non standard named TableMeta-Schema if only one found [SPR-15090] #19656
  • Remove String#toCharArray from ScriptUtils [SPR-15075] #19641
  • Track bean dependencies for calls between @Bean methods within @Configuration classes [SPR-15069] #19635
  • xml websockets configuration does not mirror annotation configuration [SPR-15068] #19634
  • SchedulingConfigurer's ScheduledTaskRegistrar should reliably shut down before TaskScheduler [SPR-15067] #19633
  • Backport streamlined ClassPathBeanDefinitionScanner setup [SPR-15061] #19627
  • Remove unused Log object from MessageHeaderAccessor [SPR-15045] #19611
  • Backward compatibility: initDefaultStrategies() is no longer invoked on subclasses of "MessageListenerAdapter" [SPR-15043] #19609
  • @Aspect pointcut declarations do not support dynamically loaded classes [SPR-15040] #19606
  • Reactor2StompTcpClient should use a shared EventLoopGroup [SPR-15035] #19601
  • Consistent autowiring behavior for specifically typed injection points against loosely typed @Bean methods [SPR-14960] #19527
  • ContentCachingRequestWrapper can have maxContentLength to limit caching [SPR-14829] #19395
  • ScheduledAnnotationBeanPostProcessor should reliably apply after AnnotationAwareAspectJAutoProxyCreator [SPR-14692] #19256
  • Classes with abstract @Lookup methods not registered in case of classpath scanning [SPR-14550] #19118
  • Deterministic and JVM-independent @Bean registration order within Class-reflected configuration classes [SPR-14505] #19074
  • Allow configuring the message converter in HttpPutFormContentFilter [SPR-14503] #19072
  • getBeanNamesForType(ResolvableType) does not reliably work for beans with AOP proxies [SPR-14097] #18669

🪲 Bug Fixes

  • InvocableHandlerMethod should call GenericTypeResolver with getBeanType() and only once [SPR-15186] #19752
  • HiddenHttpMethodFilter may disturb error rendering when handling malformed multipart request [SPR-15179] #19745
  • Collection autowiring does not resolve field-level type variable against containing class [SPR-15160] #19726
  • HeaderMethodArgumentResolver doesn't resolve Optional.empty() for non-existing header [SPR-15151] #19717
  • SimpleApplicationEventMulticaster should not rely on ClassCastException having a message [SPR-15145] #19711
  • Modification in AbstractAutowireCapableBeanFactory to prevent stackoverflow errors causes context not to load. [SPR-15125] #19692
  • Incorrect resolution of ResolvableAttributes when MessageSourceSupport#alwaysUseMessageFormat is true [SPR-15123] #19690
  • Can't autowire BiMap: container resolves non-matching Map of value beans [SPR-15117] #19684
  • DefaultRedirectStrategy.sendRedirect with relative URL and ForwardedHeaderFilter add contextpath to URL twice [SPR-15088] #19654
  • Spring validation crashes with Hibernate Validation 5 style list constraint violations [SPR-15082] #19648
  • Annotated method argument matching performance issue [SPR-15060] #19626
  • AutoProxyRegistrar throws NullPointer on @kotlin.Metadata Annotation [SPR-15055] #19621
  • Regression with poolTargetSource and scoped proxy [SPR-15042] #19608
  • Constant error 416 for a byte-range request with content type application/octet-stream [SPR-15041] #19607
  • ConcurrentModificationException in AbstractRequestExpectationManager [SPR-15029] #19596
  • LinkedCaseInsensitiveMap does not properly support Java 8's merge() and compute() methods [SPR-15026] #19593
  • Injecting bean in configurable class using load-time weaving broken when referenced on scoped-proxy class [SPR-14892] #19458

📔 Documentation

  • Improve the logging documentation [SPR-15170] #19736
  • CookieLocaleResolver maxAge documentation wrong [SPR-15155] #19721

5.0 M4 Release

17 Jan 14:18
Compare
Choose a tag to compare

⭐ New Features

  • Kotlin extension for RestTemplate [SPR-15056] #19622
  • Kotlin extension for Web function API [SPR-15054] #19620
  • Kotlin extension for GenericApplicationContext with registerBean(KClass) variants [SPR-15048] #19614
  • Provide a way to specify hints in the functional web API [SPR-15030] #19597
  • Support @Nullable annotations as indicators for optional injection points [SPR-15028] #19595
  • Add HttpHeaders getter and setter for Accept-Language [SPR-15024] #19591
  • Provide a RequestDataValueProcessor (or equivalent) mechanism in Spring Web Reactive [SPR-15001] #19568
  • Support for "request parameters" (query string + form data) in ServerWebExchange [SPR-15000] #19567
  • Provide computeIfAbsent-like method on ObjectProvider [SPR-14980] #19546
  • Make it easier to use WebFilter with Functional Web Framework [SPR-14979] #19545
  • Add status code check to bodyTo[Mono|Flux] [SPR-14977] #19543
  • Make signature of ReactiveHttpOutputMessage#writeAndFlushWith(...) more flexible [SPR-14952] #19519
  • Support Kotlin nullable information for @Autowired and @Inject [SPR-14951] #19518
  • Buffering of output in Spring Web Reactive with Netty too aggressive [SPR-14943] #19510
  • Support getting/writing the body as Flux in WebClient [SPR-14918] #19485
  • Allow serving static files from a directory to the functional web framework [SPR-14913] #19480
  • Automatically set the right content type in BodyInserters#fromResource() [SPR-14905] #19471
  • ReactiveAdapter.Descriptor should have a more descriptive way of creating instances of it [SPR-14902] #19468
  • Allow HTTP status exceptions to be easily thrown from Controllers [SPR-14895] #19461
  • TaskScheduler interface should support java.time.Instant/Duration [SPR-14875] #19441
  • Allow HandlerFunction to return a Mono [SPR-14870] #19436
  • Add a functional way to register a bean [SPR-14832] #19398
  • Align ISO timezone parsing in DateFormatter with Joda-Time / JSR-310 [SPR-14675] #19239
  • Cache ASM metadata at the context level [SPR-14654] #19219
  • Reactive WebClient SSE extractors [SPR-14539] #19107
  • Add HttpHeaders getter and setter for Content-Language [SPR-14536] #19105
  • Reactive HTTP response based RedirectView [SPR-14534] #19103
  • Reactive equivalent for RequestContext and BindStatus [SPR-14533] #19102
  • Reactive response URL-rewriting mechanism [SPR-14529] #19098
  • Reactive WebSocket adapter layer [SPR-14527] #19096
  • Support Kotlin nullable information in Spring MVC parameters [SPR-14165] #18737

🪲 Bug Fixes

  • JsonObjectDecoder throws ArrayIndexOutOfBoundsException: -1 with valid input [SPR-15013] #19580
  • Exception accessing static resources in Spring Web Reactive with Netty [SPR-14975] #19541
  • NPE is thrown while writing the response [SPR-14941] #19508
  • Make andRoute() a drop-in replacement for and(route()) [SPR-14904] #19470
  • CssLinkResourceTransformer should not transform gzipped CSS files [SPR-14773] #19339

4.3.5 Release

17 Jan 14:22
Compare
Choose a tag to compare

⭐ New Features

  • ForwardedHeaderFilter should support sendRedirect [SPR-15020] #19587
  • JdbcTemplate should consistently delegate to getColumnMapRowMapper [SPR-15018] #19585
  • LocaleContextHolder default value should be customizable [SPR-15017] #19584
  • OkHttpClientHttpRequestFactory should allow POST requests without body [SPR-15015] #19582
  • getBeanNamesForType(ResolvableType) doesn't match generic factory method return type for yet-to-be-created bean [SPR-15011] #19578
  • Scoped EntityManager bean cannot get unwrapped to Session (with Hibernate 5.2) [SPR-15010] #19577
  • Cannot customize autoGrowCollectionLimit on @InitBinder method when set custom MessageCodesResolver to Spring MVC [SPR-15009] #19576
  • Support for java.util.Optional as a @RequestBody [SPR-15007] #19574
  • Provide a way to unregister a DataSource in SQLErrorCodesFactory [SPR-15006] #19573
  • Spring should tolerate zero-argument constructors with javax.inject.Inject [SPR-15005] #19572
  • Add request matchers for query parameters in MockRestRequestMatchers [SPR-14995] #19561
  • Update JdbcUtils to improve enum support [SPR-14990] #19556
  • @GetMapping method annotation uses consumes attribute from @RequestMapping class annotation [SPR-14988] #19554
  • MimeTypeUtils.parseMimeType should ignore an inner ";" inside a quoted value [SPR-14986] #19552
  • HttpInvokerClientInterceptor should not wrap client-side Error as RemoteAccessException [SPR-14985] #19551
  • @DateTimeFormat(iso = ISO.DATE_TIME) should use optimized formatter for LocalDateTime [SPR-14958] #19525
  • Shared DefaultConversionService instance e.g. for BeanPropertyRowMapper [SPR-14948] #19515
  • Normalize resource URL in ResourceServlet [SPR-14946] #19513
  • Include expression string in SpelParseException [SPR-14942] #19509
  • Support for Jetty 9.4 (and 9.3.15+) [SPR-14940] #19507
  • ResponseEntity builders should allow casting an empty body to any type [SPR-14939] #19506
  • Allow PayloadArgumentResolver to only apply to @Payload annotated parameters [SPR-14937] #19504
  • PathMatchingResourcePatternResolver finds duplicate resources for executable jars but not for executable wars [SPR-14936] #19503
  • Implement allocation-friendly method to get user count in SimpUserRegistry [SPR-14930] #19497
  • ResourceUrlEncodingFilter, ResourceUrlProvider should correctly resolve hash'ed resource paths [SPR-14928] #19495
  • Improve performance for conversions using a method parameter based type descriptor with annotations [SPR-14926] #19493
  • DefaultListableBeanFactory.copyConfigurationFrom should provide independent AutowireCandidateResolver instance [SPR-14921] #19488
  • HtmlUnitRequestBuilder ignores form encoding type [SPR-14916] #19483
  • Improve performance of STOMP message header encoding [SPR-14901] #19467
  • BeanPropertyRowMapper should be able to convert SQL timestamp to java.time.LocalDate/LocalTime [SPR-14898] #19464
  • getBeanDefinitionNames should not leak the frozenBeanDefinitionNames array [SPR-14897] #19463
  • Detect invalid configuration for autoGrowCollectionLimit on DataBinder [SPR-14888] #19454
  • Use String.intern() for Class reading [SPR-14886] #19452
  • Add PATCH HTTP operation to RestTemplate [SPR-14857] #19423
  • Spring WebSockets should support token-based authentication [SPR-14690] #19254
  • Add RedirectAttributesMethodArgumentResolver to the default argument resolvers in ExceptionHandlerExceptionResolver [SPR-14651] #19217
  • CommonsMultipartFile.getOriginalFilename() should be able to preserve header-specified filename as-is [SPR-14613] #19180

🪲 Bug Fixes

  • MBeanExporter fails against null beans [SPR-15031] #19598
  • Pointcut evaluation fails against AbstractHandlerMethodMapping$MappingRegistry with AspectJ 1.8.10 [SPR-15019] #19586
  • Behaviour of field injection for List dependencies that are produced and consumed by the same configuration class has changed in 4.3.5 snapshots [SPR-14996] #19563
  • Concurrency problem in DeferredResult: potential double execution of handleResult [SPR-14978] #19544
  • ImportAware.setImportMetadata not invoked if import inherited from superclass with negative condition [SPR-14972] #19538
  • List-to-String conversion exception does not refer to element type [SPR-14971] #19537
  • Self reference fallback in 4.3 is not meant to apply to collection elements [SPR-14965] #19532
  • PathMatchingResourcePatternResolver provides duplicate resources with relative URL [SPR-14934] #19501
  • NPE in LoadTimeWeavingConfiguration: loadTimeWeaver() called too early [SPR-14931] #19498
  • ConversionService performance regression [SPR-14929] #19496
  • AbstractSockJsSession deadlock when tomcat WsSession is closing [SPR-14917] #19484
  • ExceptionHandlerExceptionResolver should not log propagated exceptions at warn level [SPR-14907] #19473
  • sse breaks with indenting serializer [SPR-14899] #19465
  • Content-based versions are not inserted into resource URLs in an error page [SPR-14891] #19457
  • Netty4ClientHttpRequestFactory should use SSL if port is 443 or scheme is https [SPR-14889] #19455
  • RestTemplate POST and PUT don't work with Netty4ClientHttpRequestFactory [SPR-14860] #19426

📔 Documentation

  • SpEL and Date Literals [SPR-14987] #19553