Skip to content

Commit a733428

Browse files
committed
Prevent early initialization of binding in ValidationAutoConfiguration
This commit replaces the use of ConfigurationProperties in ValidationAutoConfiguration by an explicit environment check, as it was already the case for the spring.aop.proxy-target-class property. Closes gh-45618
1 parent e51aa67 commit a733428

File tree

5 files changed

+18
-107
lines changed

5 files changed

+18
-107
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2828
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
2929
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
30-
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3130
import org.springframework.boot.validation.MessageInterpolatorFactory;
3231
import org.springframework.boot.validation.beanvalidation.FilteredMethodValidationPostProcessor;
3332
import org.springframework.boot.validation.beanvalidation.MethodValidationExcludeFilter;
@@ -51,7 +50,6 @@
5150
@AutoConfiguration
5251
@ConditionalOnClass(ExecutableValidator.class)
5352
@ConditionalOnResource(resources = "classpath:META-INF/services/jakarta.validation.spi.ValidationProvider")
54-
@EnableConfigurationProperties(ValidationProperties.class)
5553
@Import(PrimaryDefaultValidatorPostProcessor.class)
5654
public class ValidationAutoConfiguration {
5755

@@ -71,13 +69,14 @@ public static LocalValidatorFactoryBean defaultValidator(ApplicationContext appl
7169
@Bean
7270
@ConditionalOnMissingBean(search = SearchStrategy.CURRENT)
7371
public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment,
74-
ValidationProperties validationProperties, ObjectProvider<Validator> validator,
75-
ObjectProvider<MethodValidationExcludeFilter> excludeFilters) {
72+
ObjectProvider<Validator> validator, ObjectProvider<MethodValidationExcludeFilter> excludeFilters) {
7673
FilteredMethodValidationPostProcessor processor = new FilteredMethodValidationPostProcessor(
7774
excludeFilters.orderedStream());
7875
boolean proxyTargetClass = environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true);
7976
processor.setProxyTargetClass(proxyTargetClass);
80-
processor.setAdaptConstraintViolations(validationProperties.getMethod().isAdaptConstraintViolations());
77+
boolean adaptConstraintViolations = environment
78+
.getProperty("spring.validation.method.adapt-constraint-violations", Boolean.class, false);
79+
processor.setAdaptConstraintViolations(adaptConstraintViolations);
8180
processor.setValidatorProvider(validator);
8281
return processor;
8382
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/validation/ValidationProperties.java

Lines changed: 0 additions & 64 deletions
This file was deleted.

spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2861,6 +2861,12 @@
28612861
"name": "spring.thymeleaf.suffix",
28622862
"defaultValue": ".html"
28632863
},
2864+
{
2865+
"name": "spring.validation.method.adapt-constraint-violations",
2866+
"type": "java.lang.Boolean",
2867+
"description": "Whether to adapt ConstraintViolations to MethodValidationResult.",
2868+
"defaultValue": false
2869+
},
28642870
{
28652871
"name": "spring.webflux.hiddenmethod.filter.enabled",
28662872
"type": "java.lang.Boolean",

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/validation/ValidationAutoConfigurationTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,14 @@ void validationCanBeConfiguredToAdaptConstraintViolations() {
221221
});
222222
}
223223

224+
@Test
225+
void validationUseDefaultAdaptToConstraintViolationsValue() {
226+
this.contextRunner.withUserConfiguration(AnotherSampleServiceConfiguration.class).run((context) -> {
227+
MethodValidationPostProcessor postProcessor = context.getBean(MethodValidationPostProcessor.class);
228+
assertThat(postProcessor).hasFieldOrPropertyWithValue("adaptConstraintViolations", false);
229+
});
230+
}
231+
224232
@Test
225233
@SuppressWarnings("unchecked")
226234
void userDefinedMethodValidationPostProcessorTakesPrecedence() {

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/validation/ValidationPropertiesTests.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)