Use @Validated as trigger for JSR-330 validation

Update `ConfigurationPropertiesBindingPostProcessor` so that
`@Validated` is expected to be used to trigger JSR-330 validation.

Any existing configuration classes that use JSR-330 annotations but
don't have `@Validated` will currently still be validated, but will
now log a warning. This should give users a chance to add the requested
annotations before the next Spring Boot release where we will use them
as the exclusive signal that validation is required.

Closes gh-7579
This commit is contained in:
Phillip Webb
2017-01-18 20:29:31 -08:00
parent f42ebe428c
commit 10dbf3c571
12 changed files with 141 additions and 23 deletions

View File

@@ -1090,13 +1090,16 @@ only rely on custom converters qualified with `@ConfigurationPropertiesBinding`.
[[boot-features-external-config-validation]]
==== @ConfigurationProperties Validation
Spring Boot will attempt to validate external configuration, by default using JSR-303
(if it is on the classpath). You can simply add JSR-303 `javax.validation` constraint
annotations to your `@ConfigurationProperties` class:
Spring Boot will attempt to validate `@ConfigurationProperties` classes whenever they
annotated with Spring's `@Validated` annotation. You can use JSR-303 `javax.validation`
constraint annotations directly on your configuration class. Simply ensure that a
compliant JSR-303 implementation is on your classpath, then add constraint annotations to
your fields:
[source,java,indent=0]
----
@ConfigurationProperties(prefix="foo")
@Validated
public class FooProperties {
@NotNull
@@ -1114,6 +1117,7 @@ as `@Valid` to trigger its validation. For example, building upon the above
[source,java,indent=0]
----
@ConfigurationProperties(prefix="connection")
@Validated
public class FooProperties {
@NotNull