snicoll
released this
⭐ New Features
- Add null check for ExceptionHandlerMethodResolvers #26339
- ClassNotFoundException: ExchangeFunction when using WebTestClient with Spring MVC #26308
- Early support for JDK 17 #26307
- Assertion error details lost in rethrow in assertWithDiagnostics #26303
- Update ReactiveAdapterRegistry to do classpath checks at class initialization #26295
- Problem with
@Schedule
with Quartz features in CronExpression #26289 - Make use of abortOnRequest in Jetty Reactive HttpClient #26287
- Update OncePerRequestFilter.isAsyncDispatch to use HttpServletRequest.getDispatcherType() #26282
- Introduce computeAttribute() in AttributeAccessor #26281
- Translate PostgreSQL code 21000 (cardinality_violation) #26276
- Consistent type resolution handling for NullBean #26271
- Defensively handle loadClass null result in BeanUtils.findEditorByConvention (against misbehaving ClassLoader impl such as in the GWT JettyLauncher) #26252
- Subscriber context not propagated to WebSocketHandler for Tomcat websockets #26210
- Introduce ApplicationEvents abstraction to capture application events published during a test #25616
- Spring AOP should not apply UndeclaredThrowableException to checked exceptions from Kotlin methods #23844
🐞 Bug Fixes
- Cannot remove headers from httpHeaders.keySet() in WebFlux #26361
- ClassCastException handling at SimpleApplicationEventMulticaster of payload items #26349
- DefaultPartHttpMessageReader creates live resources that won't be shut down #26347
- Sending empty Flux to RSocket channel causes DecodingException: JSON decoding error: No content to map due to end-of-input #26344
- Fix implementation of isOpen() in ReactorNettyWebSocketSession #26341
- Remove obsolete commandName attribute in spring-form.tld #26337
- The response has a duplicate "Content-Length" header when get by range header #26330
@ExceptionHandler
methods not invokable if matched on exception's cause level > 1 #26317- Switch to PathPatternParser for Spring MVC breaks welcome page auto configuration #26318
- CronExpression cannot parse combination of step values #26313
- Fix JdbcOperations.queryForObject/queryForList extensions #26312
- ClassCastException during websocket upgrade for mutated request #26304
- kotlinx.serialization should not be used for Java interfaces implemented by Java classes #26298
- NettyHeadersAdapter.add() accepts
@Nullable
value but throws NullPointerException #26274 - Lots of boundedElastic-evictor TIMED_WAITING threads related to form data requests #26263
- No originalFilename in MockMultipartFile now leads to add it just as part #26261
- UriComponentsBuilder fromUriString cannot parse File URI #26258
📔 Documentation
- Slow prototype bean creation when migrating spring-boot 2.3.5 -> 2.4.1 #26369
- Application built against Spring Framework 5.3 breaks deployment to Wildfly 9 #26355
- Improve MockMvc samples in reference to show where static imports come from #26311
- MultipartFile.getOriginalFilename() documentation should warn user not to use it as destination file name #26299
- Spring data DomainClassConverter broken with Spring 5.3 in case of missing entity #26296
- Document initialization and shutdown logging semantics for the TestContext framework #25385
🔨 Dependency Upgrades
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
Assets
2
⭐ 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 nestedRequestPredicate
#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 inWebClient
#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
- 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!
Assets
2
snicoll
released this
⭐ New Features
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26191
- Register bean definition dependencies when used via configuration class injected fields #26168
- Wildcard is a valid Access-Control-Expose-Headers value #26115
- EntityManagerFactory startup failure in deferred mode is only available on first use #26094
🐞 Bug Fixes
- AbstractJackson2HttpMessageConverter writes partial data when exception occurs during write #26246
- Remove duplicate "property" in PropertyCacheKey.toString() #26242
- DataBuffer Leak in Server Response #26234
- GenericConversionService$Converters.getMatchableConverters throws ConcurrentModificationException on Java 9+ #26184
- ConcurrentModificationException in NativeMessageHeaderAccessor#copyHeaders #26158
- MimeType is no longer actually serializable #26128
- PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26105
- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26083
- NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26073
- DataBufferUtils#join may release a DataBuffer more than necessary #26061
📔 Documentation
- Clarify intended advice execution behavior in Spring version 5.2.7+ #26204
- DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26135
- Document that
@Transactional
does not propagate to new threads #26102
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR15 #26175
Assets
2
snicoll
released this
⭐ New Features
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26192
- Wildcard is a valid Access-Control-Expose-Headers value #26116
- EntityManagerFactory startup failure in deferred mode is only available on first use #26095
- StompSubProtocolHandler logs failed authentication with error stack trace #26038
- DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26015
- Inefficient request handling inside ServletRequestDataBinder #26005
🐞 Bug Fixes
- Remove duplicate "property" in PropertyCacheKey.toString() #26243
- DataBuffer Leak in Server Response #26235
- PathMatchingResourcePatternResolver fails to resolve resources from JAR located in path with '#' on JDK 11+ #26106
- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26084
- NamedParameterJdbcTemplate.batchUpdate does not individually apply the SQL type from each SqlParameterSource argument #26074
- Order of profiles in tests is not preserved #26009
📔 Documentation
- DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26136
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR23 #26233
Assets
2
snicoll
released this
⭐ New Features
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26193
- Inefficient request handling inside ServletRequestDataBinder #26006
- Avoid creation of unused logger instance in AbstractMediaTypeExpression #25903
🐞 Bug Fixes
- Remove duplicate "property" in PropertyCacheKey.toString() #26244
- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26085
- LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25962
- Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25873
- ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25870
- jsessionid breaks request mappings when removeSemicolonContent is turned off #25868
📔 Documentation
Assets
2
snicoll
released this
⭐ New Features
- ContentCachingResponseWrapper should not add “Content-Length” when “Transfer-Encoding” is present #26194
- Inefficient request handling inside ServletRequestDataBinder #26007
- Avoid creation of unused logger instance in AbstractMediaTypeExpression #25904
🐞 Bug Fixes
- Remove duplicate "property" in PropertyCacheKey.toString() #26245
- UrlPathHelper#removeJsessionid doesn't remove the jsessionid from the URL #26086
- jsessionid breaks request mappings when removeSemicolonContent is turned off #25869
📔 Documentation
- DateTimeFormat ISO.DATE_TIME javadoc contains misleading default note #26138
Assets
2
⭐ 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
- DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26010
- 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!
Assets
2
snicoll
released this
⭐ New Features
- StompSubProtocolHandler logs failed authentication with error stack trace #26037
- MergedAnnotationCollectors.toAnnotationSet() should not create intermediate ArrayList #26036
- DefaultSimpUserRegistry prevents event from being published if original SimpMessageHeaderAccessor cannot be found #26013
- DefaultWebClientBuilder copies references #25993
- Inefficient request handling inside ServletRequestDataBinder #25990
🐞 Bug Fixes
- Add FullyQualifiedAnnotationBeanNameGenerator.INSTANCE #26027
- Autowiring does not work reliably in case of dynamically changing prototype bean class #26020
- Order of profiles in tests is not preserved #26008
- SseEmitter: connection closed after first event #25989
📔 Documentation
- Fix a broken Asciidoctor syntax in core-resources.adoc #26000
Assets
2
⭐ New Features
- Allow cache eviction for ConcurrentLruCache #25963
- Support Optional for query parameters in UriBuilder and UriComponentsBuilder #25951
- Deprecate
StringUtils.isEmpty(Object)
and replace remaining usage (e.g. withObjectUtils.isEmpty
) #25945 - Introduce RouterFunction attributes #25938
- Discover
@Sql
,@SqlConfig
,@SqlGroup
, &@SqlMergeMode
on enclosing class for nested test class #25913 - Support Propagation.NEVER for disabling test-managed transactions #25909
- Extensible invocation of TcpClient in ReactorNettyTcpClient #25889
- Ignore duplicate configuration metadata for cache key in the TestContext framework #25800
- Avoid use of String's for ContentDisposition type #25647
- Expose access to STOMP SimpleMessageBroker sessions user Principal #25191
- Allow programmatic registration of completion and error callbacks to transactional event listeners #24163
- Support suspending functions annotated with
@Transactional
#23575 - StompBrokerRelay doesn't send heartbeats to broker when
@MessageMapping
handles received messages #22822
🐞 Bug Fixes
@NestedTestConfiguration
should not be discovered on enclosing class for nested interface #25917- UriComponentsBuilder controller method argument has no path #25822
- Support multiple matchers in MockMvc Kotlin DSL #24103
📔 Documentation
- Document
@NestedTestConfiguration
support #25912 - Improve R2DBC DatabaseClient documentation regarding array/Collection-like bind parameters #25860
- Document
@DynamicPropertySource
use cases that require@DirtiesContext
#25850 - Use lowercase property names in SpEL examples #25538
🔨 Dependency Upgrades
- Upgrade to Kotlin Coroutines 1.4.0 #25969
- Upgrade to RSocket 1.1.0 #25956
- Upgrade to Reactor 2020.0.0 #25947
- Upgrade to Gradle 6.7 #25918
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
Assets
2
snicoll
released this
⭐ New Features
- Optimize Jackson resource management in codecs #25910
- Avoid creation of unused logger instance in AbstractMediaTypeExpression #25901
- Native Hibernate 5 bootstrapping with JTA transaction manager requires hibernate.transaction.coordinator_class=jta to be set #25858
- Cannot test
@RequestPart
multipart controllers with Servlet MockPart #25829 - Add MariaDB to the supported database products for procedures and functions #25811
- Optimize String argument resolution in MessageTag #25809
- Avoid repeated Charset resolution in MimeType #25808
🐞 Bug Fixes
- Incorrect http response for a request using the Range header for pre-compressed resources #25976
@ActiveProfiles
with same profiles but different order results in duplicate ApplicationContext #25973- LinkedMultiValueMap downstream issue with MultiValueMapAdapter package private base class #25960
- DataBufferUtils.CompositeMatcher causes poor performance when one or more matchers does not match #25915
- HttpSeverOperations overrides content-length to 0 on HTTP HEAD #25908
- jsessionid breaks request mappings when removeSemicolonContent is turned off #25864
- JettyClientHttpConnector triggers early cancellation #25849
- Race condition in DataBufferUtils.readAsynchronousFileChannel resulting in FD leak (Channel remains open) #25831
- SimpMessagingTemplate.convertAndSend results in UnsupportedOperationException when Spring Cloud Sleuth is present #25821
- ClassCastException when wiring bean using method injection (NullBean instead of 'null') #25806
- Thread-scoped bean creation freezes if dependent bean is retrieved before dependency bean #25801
- Sending an event as part of the EMF lock triggers a deadlock #25799
- Wrong type inference in Kotlin while overriding RequestMappingHandlerMapping#getMappingForMethod #25657
- SseEmitter (ResponseBodyEmitter) keeps collecting messages if not initialized #25442
📔 Documentation
- Correct DispatcherServlet initialization sample webmvc.adoc #25965
- Document that TransactionalEventListener only works with non-reactive transactions #25805
- Published reference documentation contains unnecessary folders and files #25783
- Incorrect example in javadocs of Assert.notNull(object, messageSupplier) #25774