v6.1.4
⭐ New Features
- Add missing RequestPredicate variants in coRouter #32256
- Adapt ConcurrencyThrottleSupport to use ReentrantLock for better virtual thread support #32251
- Create optimized versions of request predicates #32244
- Include function name in
SpelMessage.INCORRECT\_NUMBER\_OF\_ARGUMENTS\_TO\_FUNCTION
#32239 - Add Coroutines support to
NonReactiveHandlerMethodPredicate
#32227 - RouterFunctionMapping does not implement MatchableHandlerMapping #32221
- Initialize (another) Map with correct size in RequestPredicates #32215
- Make SmartLifecycle
phase
value configurable in STOMP message handling components #32205 - Initialize Map with correct size in RequestPredicates #32201
- Let
BeanPropertyRowMapper
subclasses customize mapped names #32199 - Improve client and server handling of STOMP heartbeat failures #32195
- Optimize Map methods in ServletAttributesMap #32189
- Support binary streams with
JdbcClient
#32161 - Annotate core functional SPIs in SpEL with
@FunctionalInterface
#32135 - Cannot use
SimpleJdbcInsert
with catalog name #32124 - Refactor ReloadableResourceBundleMessageSource #32118
- Reuse
MapPropertySource
forDynamicValuesPropertySource
implementation (as a template for custom variants) #32110 - Improve Spring AOP performance for methods without specific advice #32104
- Make it possible to configure any TaskExecutor through ChannelRegistration #32081
- Add support for JSON streams to Kotlin Serialization #32074
- Avoid reflecting to obtain
validationGroups
every time the call is made #32068 - Reject
@RequestMapping
and@HttpExchange
declarations on the same element #32065 - Missing toString for ExponentialBackOff #32061
- Reject multiple
@HttpExchange
declarations on the same element #32049 - ClientAbortException from StreamingResponseBody can cause infinite loop of dispatches #32042
- Log warning if multiple
@PostMapping
,@GetMapping
, etc. annotations are declared #31962 - Using types in
@SessionAttributes
is sometimes not reflected in the model #30463 - Improve read publisher cancel handling to avoid connections in CLOSE_WAIT state with WebSocket on Tomcat #30393
- Provide more control over JPA entities scanning #27892
- Provide and document a way to handle single-page application redirects #27257
- MockMvcClientHttpRequestFactory swallows ServletResponse.errorMessage #26720
🐞 Bug Fixes
- Cannot send Server-Sent Events without data using WebMvc.fn SseBuilder #32270
- Fix
pathExtension
null-safety in Kotlin DSLs #32254 SimpleEvaluationContext.Builder
is notfinal
and has apublic
constructor #32253@JsonDeserialize(builder = ...)
does not work in GraalVM native image #32238- RestClientAdapter claims it supports request attributes when it does not #32232
- ThreadPoolTaskExecutor rejecting tasks as soon as the context has been closed can lead to exceptions during web app shutdown #32226
- Consistent parsing of user information in UriComponentsBuilder #32211
- "IllegalStateException: Cannot call sendError() after the response has been committed" when IOException is thrown during resolving method argument values on Tomcat >= 10.1.16 #32206
- No longer able to override the
toString()
inHandlerMethod
from6.1.3
#32184 - 6.1.3 regression: aspect not called with multiple inheritance #32181
- Unable to use baseUrl on builders created from RestTemplate #32180
- MessageDeliveryException on shutdown with open WebSocket connections #32171
- With XML configuration, setter selection can be random in case of overloaded setter methods (e.g. on SimpleClientHttpRequestFactory in 6.1.3 from convertForProperty method) #32159
- Cannot process AOT when spring-orm is on the classpath without JPA #32155
- SpEL's
Indexer.setArrayElement()
incorrectly requests conversion to wrapper instead of primitive #32147 - SpEL increment and decrement operators do not generate prefix AST representation #32144
- Validation of
PartEventHttpMessageReader#maxParts
is off by one #32122 - QualifierAnnotationAutowireCandidateResolver.checkQualifier does identity checks when comparing arrays used as qualifier fields #32106
- Guard against multiple body subscriptions in Jetty and JDK reactive responses #32100
- Parameter based cache keys on repository methods can't resolve after 6.1.2->6.1.3 #32087
- Exceptions thrown by custom error handlers are not recorded in RestTemplate observations #32060
- Static resources caching issues with ShallowEtagHeaderFilter and Jetty caching directives #32039
RestClient
calls interceptors fromRestTemplate
twice #32038DefaultRestClientBuilder.defaultRequest(...)
doesn't do anything #32028- Alias resolution error message in
SimpleAliasRegistry
is misleading #32025 - Destroy method not found in Native image for
ExecutorService
Bean type #32006 RequestPredicate
fails with WebFlux 6.1.2 #31955- ChannelSendOperator.WriteBarrier race condition in request(long) method leads to response being dropped #31865
📔 Documentation
- Fix Kotlin syntax errors in RestClient builder example in rest-clients.adoc #32265
- Use double dot in "META-INF/aop.xml" documentation #32264
- Document that functions are variables in SpEL EvaluationContexts #32258
- Add section on AOT best practices about registering beans programmatically #32241
- Add section on AOT best practices about registering singletons #32240
- Fixes syntax error in JdbcClient examples #32236
- Document
@RequestAttribute
in HTTP clients #32231 - Fix typo in beanvalidation.adoc #32218
- Variables definition fixed #32216
- Document safe navigation support for collection selection/projection in SpEL #32208
- Document usage of SpEL's power operator in the reference manual #32187
- Document support for overloading operators in SpEL #32182
- Update basics.adoc #32145
- Document
between
operator in SpEL #32140 - Update documentation for supported letters in variable names in SpEL #32138
- Document repeat and characer subtraction
String
operators in SpEL #32137 - Document increment and decrement operators in SpEL #32136
- Document cron-vs-quartz parsing convention for dayOfWeek part in CronExpression #32128
- Fix typo #32111
- Graceful shutdown does not cancel
@Scheduled
tasks #32109 - Fixes atlas-extension order #32083
- Spring MVC and WebFlux docs need to say method validation applies if any method parameter has constraint annotations #32082
- Add
@see PathPattern
to function router methods with a pattern parameter #32045 - Rename
class-data-sharing.html
tocds.html
#32044 - Enable table striping by default in the reference manual #32022
- Document that Conditions can be ordered #32019
- Document how
@JvmName
could mitigate Kotlininternal
modifier impact #32010 - Update docs on server side use of
@HttpExchange
to make it more clear when it is a good fit #32008 - Document safe navigation semantics within compound expressions in SpEL #21827
- Document limitation of SpEL regarding minimum values for numeric literals #20779
🔨 Dependency Upgrades
- Upgrade to Micrometer 1.12.3 and Context Propagation 1.1.1 #32277
- Upgrade to Reactor 2023.0.3 #32274
❤️ Contributors
Thank you to all the contributors who worked on this release:
@1515biubiubiu, @Akaame, @OlgaMaciaszek, @andreibastun, @cirusthenter, @erichaagdev, @jee14, @jmondo, @kilink, @kzander91, @mnhock, @quaff, @rotilho, @rwinch, @senocak, @spencergibb, and @wfouche