mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Do not consider bridge methods when binding java bean properties
Fixes gh-28917
This commit is contained in:
parent
34f96514ad
commit
e4b0575a12
@ -165,7 +165,8 @@ class JavaBeanBinder implements DataObjectBinder {
|
||||
private boolean isCandidate(Method method) {
|
||||
int modifiers = method.getModifiers();
|
||||
return !Modifier.isPrivate(modifiers) && !Modifier.isProtected(modifiers) && !Modifier.isAbstract(modifiers)
|
||||
&& !Modifier.isStatic(modifiers) && !Object.class.equals(method.getDeclaringClass())
|
||||
&& !Modifier.isStatic(modifiers) && !method.isBridge()
|
||||
&& !Object.class.equals(method.getDeclaringClass())
|
||||
&& !Class.class.equals(method.getDeclaringClass()) && method.getName().indexOf('$') == -1;
|
||||
}
|
||||
|
||||
|
@ -318,6 +318,18 @@ class JavaBeanBinderTests {
|
||||
assertThat(bean.getValueBean()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void bindToClassWithOverriddenPropertyShouldSetSubclassProperty() {
|
||||
MockConfigurationPropertySource source = new MockConfigurationPropertySource();
|
||||
source.put("foo.value-bean.int-value", "123");
|
||||
source.put("foo.value-bean.sub-int-value", "456");
|
||||
this.sources.add(source);
|
||||
ExampleNestedSubclassBean bean = this.binder.bind("foo", Bindable.of(ExampleNestedSubclassBean.class)).get();
|
||||
assertThat(bean.getValueBean()).isNotNull();
|
||||
assertThat(bean.getValueBean().getIntValue()).isEqualTo(123);
|
||||
assertThat(bean.getValueBean().getSubIntValue()).isEqualTo(456);
|
||||
}
|
||||
|
||||
@Test
|
||||
void bindToClassWhenPropertiesMissingShouldReturnUnbound() {
|
||||
MockConfigurationPropertySource source = new MockConfigurationPropertySource();
|
||||
@ -804,6 +816,35 @@ class JavaBeanBinderTests {
|
||||
|
||||
}
|
||||
|
||||
static class ExampleNestedSubclassBean extends ExampleNestedBean {
|
||||
|
||||
private ExampleValueSubclassBean valueBean;
|
||||
|
||||
@Override
|
||||
ExampleValueSubclassBean getValueBean() {
|
||||
return this.valueBean;
|
||||
}
|
||||
|
||||
void setValueBean(ExampleValueSubclassBean valueBean) {
|
||||
this.valueBean = valueBean;
|
||||
}
|
||||
|
||||
static class ExampleValueSubclassBean extends ExampleValueBean {
|
||||
|
||||
private int subIntValue;
|
||||
|
||||
int getSubIntValue() {
|
||||
return this.subIntValue;
|
||||
}
|
||||
|
||||
void setSubIntValue(int intValue) {
|
||||
this.subIntValue = intValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ExampleWithNonDefaultConstructor {
|
||||
|
||||
private String value;
|
||||
|
Loading…
Reference in New Issue
Block a user