Do not ignore unknown fields when invalid fields are being ignored
Previously, ignoring invalid fields would cause the failure for an unknown field to be ignored, irrespective of the ignoreUnknownFields attribute on `@ConfigurationProperties`. This commit updates the NoUnboundElementsBindHandler to ensure that any UnboundConfigurationPropertiesException is thrown rather than being ignored when the handler has been wrapped by an IgnoreErrorsBindHandler. Fixes gh-22308
This commit is contained in:
@@ -72,6 +72,15 @@ public class NoUnboundElementsBindHandler extends AbstractBindHandler {
|
||||
return super.onSuccess(name, target, context, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object onFailure(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Exception error)
|
||||
throws Exception {
|
||||
if (error instanceof UnboundConfigurationPropertiesException) {
|
||||
throw error;
|
||||
}
|
||||
return super.onFailure(name, target, context, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Object result)
|
||||
throws Exception {
|
||||
|
||||
@@ -170,6 +170,14 @@ class ConfigurationPropertiesTests {
|
||||
.withCauseInstanceOf(BindException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenIgnoreUnknownFieldsFalseAndIgnoreInvalidFieldsTrueWhenThereAreUnknownFieldsThenBindingShouldFail() {
|
||||
removeSystemProperties();
|
||||
assertThatExceptionOfType(ConfigurationPropertiesBindException.class).isThrownBy(
|
||||
() -> load(IgnoreUnknownFieldsFalseIgnoreInvalidFieldsTrueConfiguration.class, "name=foo", "bar=baz"))
|
||||
.withCauseInstanceOf(BindException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void loadWhenHasIgnoreInvalidFieldsTrueAndInvalidFieldsShouldBind() {
|
||||
load(IgnoreInvalidFieldsFalseProperties.class, "com.example.bar=spam");
|
||||
@@ -961,6 +969,12 @@ class ConfigurationPropertiesTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableConfigurationProperties(IgnoreUnknownFieldsFalseIgnoreInvalidFieldsTrueProperties.class)
|
||||
static class IgnoreUnknownFieldsFalseIgnoreInvalidFieldsTrueConfiguration {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableConfigurationProperties(PrefixProperties.class)
|
||||
static class PrefixConfiguration {
|
||||
@@ -1408,6 +1422,11 @@ class ConfigurationPropertiesTests {
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties(ignoreUnknownFields = false, ignoreInvalidFields = true)
|
||||
static class IgnoreUnknownFieldsFalseIgnoreInvalidFieldsTrueProperties extends BasicProperties {
|
||||
|
||||
}
|
||||
|
||||
@EnableConfigurationProperties
|
||||
@ConfigurationProperties(prefix = "com.example", ignoreInvalidFields = true)
|
||||
static class IgnoreInvalidFieldsFalseProperties {
|
||||
|
||||
Reference in New Issue
Block a user