⭐ New Features
- Throw PessimisticLockingFailureException/CannotAcquireLockException instead of plain ConcurrencyFailureException #29675
- Introduce additional constructors in
MockClientHttpRequest
andMockClientHttpResponse
#29670 - Fall back to JdkClientHttpConnector as ClientHttpConnector #29645
- Optimize object creation in
RequestMappingHandlerMapping#handleNoMatch
#29634 - Align multipart codecs on client and server #29630
- Deprecate "application/graphql+json" media type after spec changes #29617
- HTTP interface client does not call FormHttpMessageWriter when writing form data #29615
- ProblemDetail doesn't override the equals method #29606
- Add title to SockJS iFrames for accessibility compliance #29594
- Forbid loading of a test's
ApplicationContext
in AOT mode if AOT processing failed #29579 - Deprecate JettyWebSocketClient in favor of StandardWebSocketClient #29576
- Improve options to expose MessageSource formatted errors for a ProblemDetail response #29574
- Make
@ModelAttribute
and@InitBinder
annotations@Reflective
#29572 - Update
BindingReflectionHintsRegistrar
to support properties on records #29571
🐞 Bug Fixes
- Cannot use WebDAV methods in Spring MVC 6.0 anymore #29689
- AnnotatedElementUtils.findMergedRepeatableAnnotations does not fetch results when other attributes exist in container annotation #29685
- BeanWrapperImpl NPE in setWrappedInstance after invoking getPropertyValue #29681
- SpEL
ConstructorReference
does not generate AST representation of arrays #29665 - NullPointerException in BindingReflectionHintsRegistrar for anonymous classes #29657
- DataBufferInputStream violates InputStream contract #29642
- Component scanning no longer uses component index for
@Named
,@ManagedBean
, and other Jakarta annotations #29641 - Fix canWrite in PartHttpMessageWriter #29631
NoHandlerFoundException
mistakenly returns request headers fromErrorResponse#getHeaders
#29626- URI override for
@HttpExchange
doesn't work if there are bothURI
and@PathVariable
method parameters #29624 - Unnecessary parameter name introspection for constructor-arg resolution (leading to LocalVariableTableParameterNameDiscoverer warnings) #29612
- Set detail from reason in both constructors of ResponseStatusException #29608
- SpEL string literal misses single quotation marks in toStringAST() #29604
- AOT code generation fails for bean of type
boolean
#29598 request
-scoped bean with@Lazy
fails in native image (due to missing detection of CGLIB lazy resolution proxies) #29584- 500 error from WebFlux when parsing Content-Type leads to InvalidMediaTypeException #29565
- ConcurrentLruCache implementation is using too much heap memory #29520
- Duplicate key violation gets translated to DataIntegrityViolationException instead of DuplicateKeyException in Spring 6 #29511
- SpEL: Two double quotes are replaced by one double quote in single quoted
String
literal (and vice versa) #28356
📔 Documentation
- Fix ErrorResponse#type documentation #29632
- Fix typo in observability documentation #29590
- Consistent documentation references to Jakarta WebSocket (2.1) #29581
- Unrendered asciidoc headings in reference documentation #29569
- Document observability support #29524
🔨 Dependency Upgrades
- Upgrade to Apache HttpClient 5.2 #29627
- Upgrade to Gradle 7.6 #29583
- Upgrade to Micrometer 1.10.2 #29678
- Upgrade to Reactor 2022.0.1 #29679
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Aashay-Chapatwala, @CoderYellow, @ShenFeng312, @Spark61, @divcon, @izeye, @koo-taejin, @mdeinum, @mhalbritter, @quaff, and @singhbaljit