Skip to content

Commit a74dc74

Browse files
geo-mphilwebb
authored andcommitted
Allow validation api without implementation
Allow validation api in the classpath without a validator, as long as no bean is annotated `@Validated` See gh-12669
1 parent b67e6aa commit a74dc74

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBinder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class ConfigurationPropertiesBinder {
5555

5656
private final Validator configurationPropertiesValidator;
5757

58-
private final Validator jsr303Validator;
58+
private Validator jsr303Validator;
5959

6060
private volatile Binder binder;
6161

@@ -66,8 +66,7 @@ class ConfigurationPropertiesBinder {
6666
.getPropertySources();
6767
this.configurationPropertiesValidator = getConfigurationPropertiesValidator(
6868
applicationContext, validatorBeanName);
69-
this.jsr303Validator = ConfigurationPropertiesJsr303Validator
70-
.getIfJsr303Present(applicationContext);
69+
7170
}
7271

7372
public void bind(Bindable<?> target) {
@@ -93,9 +92,12 @@ private List<Validator> getValidators(Bindable<?> target) {
9392
if (this.configurationPropertiesValidator != null) {
9493
validators.add(this.configurationPropertiesValidator);
9594
}
96-
if (this.jsr303Validator != null
97-
&& target.getAnnotation(Validated.class) != null) {
98-
validators.add(this.jsr303Validator);
95+
96+
if (target.getAnnotation(Validated.class) != null) {
97+
this.jsr303Validator = ConfigurationPropertiesJsr303Validator.getIfJsr303Present(this.applicationContext);
98+
if (this.jsr303Validator != null) {
99+
validators.add(this.jsr303Validator);
100+
}
99101
}
100102
if (target.getValue() != null && target.getValue().get() instanceof Validator) {
101103
validators.add((Validator) target.getValue().get());

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/ValidationExceptionFailureAnalyzerTests.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions;
2626
import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner;
2727
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
28+
import org.springframework.validation.annotation.Validated;
2829

2930
import static org.assertj.core.api.Assertions.assertThat;
3031
import static org.junit.Assert.fail;
@@ -39,7 +40,7 @@
3940
public class ValidationExceptionFailureAnalyzerTests {
4041

4142
@Test
42-
public void test() {
43+
public void validatedPropertiesTest() {
4344
try {
4445
new AnnotationConfigApplicationContext(TestConfiguration.class).close();
4546
fail("Expected failure did not occur");
@@ -51,6 +52,11 @@ public void test() {
5152
}
5253
}
5354

55+
@Test
56+
public void nonValidatedPropertiesTest() {
57+
new AnnotationConfigApplicationContext(NonValidatedTestConfiguration.class).close();
58+
}
59+
5460
@EnableConfigurationProperties(TestProperties.class)
5561
static class TestConfiguration {
5662

@@ -60,8 +66,22 @@ static class TestConfiguration {
6066
}
6167

6268
@ConfigurationProperties("test")
69+
@Validated
6370
private static class TestProperties {
6471

6572
}
6673

74+
75+
@EnableConfigurationProperties(NonValidatedTestProperties.class)
76+
static class NonValidatedTestConfiguration {
77+
78+
NonValidatedTestConfiguration(NonValidatedTestProperties testProperties) {
79+
}
80+
81+
}
82+
83+
@ConfigurationProperties("test")
84+
private static class NonValidatedTestProperties {
85+
86+
}
6787
}

0 commit comments

Comments
 (0)