⭐ New Features
- Add RFC-8246 "immutable" attribute to
CacheControl
#29955 - Allow MockRest to match header/queryParam value list with one Matcher #29953
- DataBuffer should offer restricted access to underlying ByteBuffer #29943
- Introduce
HttpServiceProxyFactory#createClient
Kotlin extension #29942 - Support ProblemDetail serialization to XML with Jackson #29927
- Refine
TransactionalOperator.executeAndAwait
nullability #29919 - Early support for JDK 21 #29910
- StringDecoder causes direct allocation of ByteBuffer #29889
- Include all Hibernate query methods in
SharedEntityManagerCreator
'squeryTerminatingMethods
set #29886 - Add native support for RSocketExchange. #29877
- Add
@Nullable
toProblemDetail.setProperty
value argument #29868 - Deprecate obsolete
ConcurrentExecutorAdapter
for removal in 6.1 #29865 - ContentDisposition.toString() should include both regular and extended filename parameter #29861
- Refine
Jackson2ObjectMapperBuilder#configureFeature
exception handling #29859 - Flexible constructor resolution in AutowireCapableBeanFactory.createBean(Class) #29855
- Optimize CorsConfiguration::checkHeaders #29853
- Spring Web RestTemplate
http.client.requests
Metrics No Longer Haveclient.name
Tag #29839 - Allow
@Aspect
classes to extend concrete@Aspect
classes #29830 - Custom Constraint Validator not work with native image #29823
- Deprecate HttpStatus 103 CHECKPOINT in favor of new EARLY_HINTS #29816
- Fix R2dbcTransactionManager debug log: don't log a Mono #29800
- Improve generated default name for
@JmsListener
subscription #29790 - Support double-quoted values in HttpHeaders::getValuesAsList #29785
- Support method validation for an interface only proxy like an HTTP interface client #29782
- ResourceHandlers cannot resolve static resources without wildcard patterns #29739
- Release R2DBC connection when cleanup fails in transaction #29703
- Spring Webfilters and Kotlin Coroutines #29672
- Support "multipart/mixed" and "multipart/related" in DefaultServerWebExchange #29671
@JsonDeserialize(builder = ...)
does not work in GraalVM native image #29646- Combined class and method
@RequestMapping
without patterns should match root path as both "" and "/" #29625 - Prefer problem detail media type independent of ordering in Accept header #29588
- Restrict forwards in MockMvcWebConnection to 100 #29557
@JsonNaming
strategy is not supported in GraalVM native image #29386- SQL supplier in R2DBC
DatabaseClient
is eagerly invoked #29367 - Set reason for WebSocket
CloseStatus.SESSION\_NOT\_RELIABLE
#29220 - HttpComponentsClientHttpConnector hangs when host is invalid #29156
- Add ResponseEntity.ofNullable() to deal with non-Optional nullable objects #29117
- Provide access to all configured interceptors in AbstractHandlerMapping #28985
- Support
Optional
inPayloadMethodArgumentResolver
#28945 - Remove clear() call to release method of WeakEntryReference and SoftEntryReference #28863
- Add
MockMvc.multipart()
Kotlin extensions withHttpMethod
#28634 - WebSocketConnectionManager constructor with prepared URI #28524
- Deprecate Base64Utils #28434
- List supported media types in HttpMediaTypeNotSupportedException when given invalid input media types #28062
- Introduce getContentAsString and getContentAsByteArray to Resource #24651
- Support Optional in Jackson 2 message converters #24498
- Refine
ModelAttributeMethodProcessor
Kotlin exception handling #23846
🐞 Bug Fixes
- DefaultHandlerExceptionResolver::doResolveException no longer returns ModelAndView customized via protected method #29971
ex.getPropertyName()
is not initialized inResponseEntityExceptionHandler#handleTypeMismatch
#29959- Violation of a unique index on insert in MSSQL is translated to DataIntegrityViolationException instead of DuplicateKeyException #29950
- PathMatchingResourcePatternResolver duplicates module/file resources #29934
- ResourceUrlEncodingFilter throws StringIndexOutOfBoundsException in tests #29933
- Explicit target ClassLoader for interface-based proxies in MvcUriComponentsBuilder #29913
- org.springframework.web.context.ContextLoader cannot be loaded in a native image #29905
- MockHttpServletRequest InputStream has been made static in gh-29125 #29901
- MvcUriComponentsBuilder adds trailing slash if path is defined at controller level only #29897
- Closing an ApplicationContext leads to Exception at ExecutorServiceAdapter #29892
- Set WebClient Observation as current in reactor context #29891
- Client request observation contributes full URI template to uri meter tag values #29885
- HTTP client observations miss uri keyvalue for "/" requests #29879
- ProblemDetail is missing serialization hints for Native Image #29801
- Invalid Accept header results in IllegalStateException #29794
- AOT processing fails with Set if type doesn't implement Comparable #29792
- CSRF token not available to FreeMarker templates #29787
- Fail more explicitly when AOT attempts to handle a bean definition that uses an instance supplier #29556
- WebSocket stats not updated correctly when sessions cleared #29375
MockHttpServletRequest#setContentType
fails withStringIndexOutOfBoundsException
#29255InMemoryWebSessionStore#changeSessionId
makes blocking calls to UUID.randomUUID #29212- ReactorServerHttpRequest does not reflect forwarded host and port when
forwarding-header-strategy=native
or cloud platform detected #28601 - Propagate
CoroutineContext
in reactive transaction #27308 - Bean validation doesn't work on Kotlin coroutines controller parameters #23499
📔 Documentation
- Update
@DynamicPropertySource
examples regarding changes in Testcontainers #29939 - Refine
ControllerMappingReflectiveProcessor
documentation #29938 - Clarify semantics of
primitivesDefaultedForNullValue
inBeanPropertyRowMapper
#29923 - Document instrumentation for RestTemplate and/or WebClient #29904
- CronExpression::parse has invalid Javadoc #29884
- Update Javadoc on async request timeout value in HandlerFunctionAdapter #29882
- Document how to mark an observation as an error if the exception was handled #29848
- Document that bean instance suppliers are not supported with AOT/native #29835
- Clearly document that
DataClassRowMapper
supports Java records #29814 - Increase number of TOC levels in generated PDF documentation #29781
- Consistent
@Bean
method return type for equivalence with XML example #29338 - Outdated Javadoc for AbstractApplicationContext.postProcessBeanFactory #29064
- Improve documentation on support for a language-only Locale requested via "Accept-Language" #28673
- Update the reference documentation with limitation related to
@Bean
return type #29944
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Drezir, @FutureGadget, @OlgaMaciaszek, @ThomHurks, @a364176773, @bcc829, @derrick-pericipio, @divcon, @etylermoss, @fml2, @izeye, @j-min5u, @j3graham, @jprinet, @krzyk, @ks-yim, @making, @manthanb, @quaff, @r331, @sephiroth-j, @srivatsa-cfp, @vikeychen, @wplong11, @xavier-b, @yuezk, @yuzawa-san, and @zhmaeff