⭐ New Features
HibernateTransactionManager
compatibility with Hibernate 6.0/6.1 #28813- Reject JDK proxy hint registration for sealed interfaces #28786
- Provide SerializationHintsPredicates in RuntimeHintsPredicates #28772
- Deprecate convention-based annotation attribute overrides in favor of
@AliasFor
#28760 - Add native image support for WebSocket STOMP messaging #28754
- Simplify hint registration for Spring AOP proxies #28745
- Only use JPMS exports as we don't need reflection access #28733
- Open GraalVM internals to the ConstantFieldFeature #28732
- Add support for records in BindingReflectionHintsRegistrar #28721
- Replace java.util.Date and TimeUnit usage in scheduling with appropiate java.time classes #28714
- Jackson well-known module support in native image #28709
- RuntimeHints missing for WebFlux #28701
- Add runtime hints for
AbstractHandshakeHandler
#28697 - native-image: Problem with Scheduled annotation #28696
- native-image: Support for MethodValidationPostProcessor #28689
- native-image: Field 'PROPAGATION_REQUIRED' not found in class TransactionDefinition #28688
- Allow dynamic properties in ProblemDetail #28665
- Add Kotlinx Serialization support to BindingReflectionHintsRegistrar #28635
- Add ResourceHints registrar for classpath patterns #28626
- Replace build-time initialization by constant field evaluation at build-time #28624
- Add reflection hints for data binding in Web controllers #28623
- Add reflection hints for
HttpEntity
used in Web controllers #28622 - Introduce ResourcePatternHint#toRegex #28620
- Add ifPresent utility methods on RuntimeHints #28617
- Register native hints for jakarta.inject annotations #28614
- Use PathPatternParser by default in Spring MVC #28607
- Support that the same RuntimeHintsRegistrar can be specified multiple times and invoked only once #28594
- Rationalize naming strategy in ApplicationContextAotGenerator #28585
- Add minimal Kotlin DSL RouterFunction attributes support #28569
- Introduce attribute support in Kotlin RouterFunction DSL #28567
- Allow ApplicationContextAotGenerator to generated better class names #28565
- Allow BeanRegistrationAotContributions to provide BeanRegistrationCodeFragments customization #28557
- Introduce RuntimeHints predicates utilities #28555
- Deprecate trailing slash match and change default value from true to false #28552
- Improve options for exception handling in HTTP interface client #28533
- Add reflection hints for Web controllers #28518
- Ambiguous behavior for ClassNameGenerator::generateClassName #28517
- Support module path scanning for "classpath*:" resource prefix #28506
- Refactor HttpServiceProxyFactory to be suitable as an infrastructure bean #28505
- Allow custom HTTP method with
@HttpExchange
methods #28504 - Create UrlResource factory methods that throw unchecked exceptions #28501
- Introduce utility to register hints for an annotation that uses AliasFor #28497
- Support property placeholders in url attribute of
@HttpExchange
#28492 - Support default methods in
@HttpExchange
interface #28491 - Introduce AotDetector mode #28474
- Introduce a meta-annotation that indicates the annotated element requires reflection hints #28469
- Add level guards for trace logging in
SpringFactoriesLoaderRuntimeHintsRegistrar
#28465 - Add resolver for request attributes for
@HttpExchange
methods #28458 - Add WebFlux equivalent of ResponseEntityExceptionHandler #28439
- Avoid collectList when sending a Flux of objects as JSON using WebClient #28398
- Avoid loading XML files for default SQL exception translation #28216
- Refine runtime hint conditions #28126
- Provide testing infrastructure for RuntimeHints #27981
- Simplify default locale/timezone resolution in cookie/session locale resolvers #27609
- Nested Exception's message should not include the messages from causal chain #25162
- Add If-Match support and improve If-None-Match wildcard support #24881
🐞 Bug Fixes
- Guard against NPE in PathMatchConfigurer #28816
- AnnotationTypeMapping tracks
@AliasFor
mappings as convention-based #28773 - Support by-type constructor references in
ConstructorOrFactoryMethodResolver
#28728 - AOT generated code leads to exception on startup: Object of class [java.lang.Boolean] must be an instance of boolean #28727
- HtmlUnit / MockMvc integration handles forwarded URLs partially #28722
- StackOverflowError when using BindingReflectionHintsRegistrar #28683
- Wrong reflection hints for arrays of inner types #28664
- Add automatic hint for autowired field support #28655
- Reflection configuration for parameter types with an inner class have wrong name #28606
- Fix
ResourceHintsWriter
for leading/trailing wildcards #28597 - JdkHttpClientResourceFactory has dependency on org.eclipse.jetty #28588
- CompileWithTargetClassAccessClassLoader does not implement findResource #28574
- ScopedProxyBeanRegistrationAotProcessor is never called #28561
- Proxy hint missing when
AliasFor
is used on the annotation itself #28528 - Fix attribute return types in
@DeleteExchange
,@PatchExchange
, and@PutExchange
#28498 - Correctly detect Optional return type for
@HttpExchange
methods #28493 - Resolve package cycle around MissingServletRequestPartException #28455
- findAnnotationOnBean finds annotations from a static
@Bean
method's enclosing class #28298
📔 Documentation
- Fix WebClientAdapter.createHttpServiceProxyFactory() example in ref docs #28753
- Remove obsolete references to
@Required
#28600 - Improve
ResourcePatternHint
documentation #28598 - Use getHost instead of getContainerIpAddress in Redis examples #28461
- Update documentation for RFC 7807 support #28438
🔨 Dependency Upgrades
- Upgrade client support to R2DBC 1.0 #28787
- Upgrade Dokka to 1.7 #28641
- Upgrade to Kotlin 1.7.0 #28619
- Upgrade to Kotlin 1.7.10 #28784
- Upgrade to Reactor 2022.0.0-M4 #28766
❤️ Contributors
We'd like to thank all the contributors who worked on this release!