v7.1.0-M1
- starting in Spring Framework 7.1,
ForwardedHeaderFilter(Spring MVC) andForwardedHeaderTransformer(WebFlux) each require a boolean argument whether to use the standard "Forwarded" header or the "X-Forwarded" alternative headers. A separate property enables use of "X-Forwarded-Prefix" if needed. The default constructor with the existing behaviour of checking both types of headers is still available but deprecated and marked for removal. The new constructor makes forwarded header processing more deterministic and aligned with what is expected from the proxy. Please, see the updated Security Considerations section, as well as related changes in Spring Boot https://github.com/spring-projects/spring-boot/issues/51030. #37072 - Default context config is not detected when superclass or enclosing class is not annotated with
@ContextConfiguration#31456
- Add logging operators in DefaultExchangeFunction only when debug is enabled #37095
- Consistently enforce non-null instance in
AbstractFactoryBean#37091 - Reinstate invalid resource location checks #37063
- Preserve original bean names as aliases with
FullyQualifiedConfigurationBeanNameGenerator#37038 - Improve forwarded header parsing #36964
- Avoid "NullAway.Init" suppression in favor of explicit field handling #36961
- Refine and better specify error handling in MultipartParser #36947
- Use double division to calculate applied jitter in
ExponentialBackOff#36943 - Throw
ClassNotFoundExceptionfor missing class resource inThrowawayClassLoader#36938 - Replace
isAssignableFrom()withisInstance()where feasible #36899 - Simplify BUFFER_COUNT in ConcurrentLruCache to a constant #36872
- Apply auto-grow collection limit to direct field binding #36862
- Reject duplicate MIME type parameters #36841
- Add
DataSizeconverters toDefaultConversionService#36830 - Only update
ObservationThreadLocalAccessorwhen a test has an activeApplicationContext#36817 - Deprecate setDisallowedFields in DataBinder for removal #36816
- Optimize ClassNameReader.getClassName via direct ASM API #36814
- AbortedException from client logged at ERROR level with WebFlux functional endpoint #36811
- Add dedicated exception for HttpStatus.PRECONDITION_FAILED #36807
- Reset mocks only when a test has an active
ApplicationContext#36782 - Improve MimeType parser for RFC compliance #36729
- Reject unsafe static resource locations in MVC and WebFlux #36695
- Use
String#replaceinstead ofString#replaceAllwhere appropriate #36678 - Beans created with BeanRegistrar on GenericApplicationContext do not honor allow-bean-definition-overriding setting #36648
- Use defensive
Datecopies forSimpleMailMessagesentDate#36626 - Align
StandardMethodMetadatawith ASM/ClassFile support forgetReturnTypeName()#36619 - Use canonical names in error messages in annotation processing #36607
- Provide bean conditional registration capabilities in
BeanRegistrarDsl#36601 - Align with JDK behavior by throwing
TypeNotPresentExceptionduring annotation processing #36593 - Deprecate RestTemplate and related types #36574
- Remove deprecated
methodIdentification()method inCacheAspectSupport#36560 - Reject unbalanced parentheses in profile expressions #36550
- Introduce
ResolvableType.forParameter()factory method #36545 - Remove redundant
Assert.notNull()checks inResolvableType#36544 - Introduce support for custom parameter names in
ParameterResolutionDelegate#36534 - Perform case-insensitive lookup in
HttpMethod.valueOf()#36518 - Add "application/jsonl" support alongside "application/x-ndjson" for streaming #36485
- Replace HandlerMappingIntrospector with PreFlightRequestHandler bean in MVC config #36481
- GenericTypeResolver.resolveType should resolve TypeVariable with nested ParameterizedType #36480
- Introduce
classpath*:support forResourceLoader#getResourcewith fully specified resource path #36415 - Support for Map body types in FormHttpMessageConverter #36408
- Support compilation of SpEL expressions that use
Optionalwith null-safe and Elvis operators #36330 - Skip Jaxb auto-detection in HttpMessageConverters for servers #36302
- Handle multi-JAR resources in ReloadableResourceBundleMessageSource #36292
- Support for JPA 4.0
@PersistenceAgentinjection #36264 - Move multipart support out of FormHttpMessageConverter #36256
- Introduce MultipartHttpMessageConverter #36255
- Introduce HttpMessageConverter#canWriteRepeatedly #36252
- Override Servlet 6.1's
doPatch()method inFrameworkServlet#36247 - Allow local
@BootstrapWithannotation to override a meta-annotation within the same composed annotation #35938 - Support for JTA 2.1 read-only transaction management #35915
- Add typesafe method to get generic bean by name with type reference #35808
- Support reading multipart requests from RestTestClient in MockMvc #35569
- Use 500 for default exception handling when DisconnectedClientHelper#clientDisconnectedException returns true #34481
- Support reading multipart HTTP messages with a converter #33263
- Provide bean conditional registration capabilities in
BeanRegistrar#21497 - Support
@MockitoBeanand@MockitoSpyBeanon test constructor parameters #36096
- Ignore static get/is accessor methods in PropertyDescriptorUtils #37081
AnnotationDescriptor.findAllLocalMergedAnnotationsfails to find interface annotations #36975- PartGenerator should close the OutputStream when it's done reading the part #36945
- PartGenerator should also clean up the current State in case of failure #36942
- Close class resource
InputStreaminThrowawayClassLoader#36933 - GenericTypeResolver.resolveType picks a sibling interface's binding when two interfaces share a type-variable name (breaks
@RequestBodydeserialization) #36890 - Restore thread interrupt flag in
DefaultMvcResultwhen catchingInterruptedException#36876 - Character outside of permitted range in Content Disposition #36805
- Reinstate Root Servlet context as a valid location #36753
- Upgrade Kotlin Coroutines to 1.11 #37076
- Upgrade to Hibernate ORM 7.4 #36519
- Upgrade to Jackson 3.1 and 2.21 #36130
- Upgrade to JUnit 6.1.2 #36815
- Upgrade to Kotlin 2.3.20 #36484
- Upgrade to Kotlin 2.4 #37074
- Upgrade to Kotlin Serialization 1.11.0 #36657
Thank you to all the contributors who worked on this release:
@PaulNgo-BlueOC, @arnabnandy7, @bebeis, @codingkiddo, @cookie-meringue, @daguimu, @dominik-kovacs, @jhan0121, @junhyeong9812, @leestana01, @mkurz, @ngocnhan-tran1996, @quaff, @s-chan-o, @samueldlightfoot, @seregamorph, @shenjianeng, and @yeomin4242
v7.0.9
- in Spring Framework 7.0.9,
ForwardedHeaderFilter(Spring MVC) andForwardedHeaderTransformer(WebFlux) each provide a boolean constructor argument whether to use the standard "Forwarded" header or the "X-Forwarded" alternative headers. A separate property turns on and off use of "X-Forwarded-Prefix". While the default constructor preserves the existing behavior, we recommend to use the new constructor to explicitly specify which forwarded headers to use to make the processing more deterministic and aligned with what is expected from the proxy. Please, see the updated Security Considerations section for details. In 7.1 with #37072 the default constructor is deprecated and marked for removal. #37090
- Ignore an empty port value in URI parsing #37117
- Avoid retaining class files in annotation metadata #37112
- Add
@Nullableannotations when treatingMap.remove()as returning@Nullable#37067 - Fix missing nullability in JdbcTemplate.batchUpdate #37012
- Timeout property in RetryPolicy does not have a default constant #36983
- Write native configuration files as UTF-8 #36972
- DefaultServerRequest.ServletParametersMap.entrySet() does not retain HttpServletRequest.getParameterMap() order #36966
- Perform nextKey within synchronization for SQLite as well #36959
- Add support for custom ObjectInputFilter on DefaultDeserializer #36958
- Revise resource bundle caching for common locales #36957
- Improve nullability for
getSession(*)inMockHttpServletRequest#36926 - Improve fallback logic in ParameterContentNegotiationStrategy and ParameterContentTypeResolver #36925
- Improve ambiguous match check on preflight request #36903
- Improve Groovy markup template loading #36902
- Improve request path handling on a Reactor Netty server #36893
- Improve JettyWebSocketSession error handling #36891
- EclipseLinkJpaDialect singleton lock in EclipseLinkConnectionHandle.getConnection() serializes all JDBC connection acquisitions under load #37085
- MetadataReader fails to read byte[] array from annotation #37083
- Character outside of permitted range in Content Disposition #37062
- Release Jackson BufferRecycler to its pool in encoders #37059
- Reset TwoByteMatcher partial match on mismatching byte #37053
- Align
domainToAsciiwith current WhatWG spec #37018 - Ensure consistent
ButtonTagvalue attribute processing #37017 - SpEL's
InlineListis cached as a mutable list in compiled mode #37001 - Write native configuration file when only lambda hints are present #36989
- SpEL
Indexerreuses invalid cachedPropertyAccessor#36986 - SpEL reuses invalid cached
ConstructorExecutor#36985 MimeTypeUtilsraisesStringIndexOutOfBoundsExceptionfor some invalid mime types #36971- Ignore DOCTYPE inside a multi-line comment body #36948
- Avoid divide-by-zero in
ExponentialBackOffjitter #36932 - Refactor use or close lock in ConcurrentWebSocketSessionDecorator #36909
- Host header initialization breaking change in StompRelayMessageBrokerHandler #36907
- Remote address checks for SockJS session #36681 breaks xhr-polling #36904
- LifeCyclePrintWriter does not delegate correctly #36885
- IllegalArgumentException when creating named native query via Shared EntityManager with Hibernate 8.0.0-SNAPSHOT / JPA 4.0.0-M4 #36878
- Document AOP proxy semantics for Bean Overrides in tests #37121
- Provide guidance for object model design in SpEL #37102
- Fix Javadoc error in ProtobufDecoder #37079
- Document security implications of evaluating untrusted SpEL expressions #36997
- Document relationships between expressions, evaluation contexts, and accessors in SpEL #36968
- Update Javadoc for
@ActiveProfilesordering #36950 - Document behavior for 0 delay combined with jitter in backoff policies #36946
- Clarify design goal of UrlFilenameViewController in Javadoc #36906
Thank you to all the contributors who worked on this release:
@ZaMan0806, @alexisgra, @alshain, @gianmarcoschifone, @junhyeong9812, @msridhar, @perovic, @quaff, and @samueldlightfoot