Add support for annotations on constructor parameter binding
Closes gh-17109
This commit is contained in:
parent
e6151a6478
commit
6b3329b274
|
@ -83,7 +83,7 @@ class ConstructorParametersBinder implements BeanBinder {
|
||||||
private Object bind(ConstructorParameter parameter, BeanPropertyBinder propertyBinder) {
|
private Object bind(ConstructorParameter parameter, BeanPropertyBinder propertyBinder) {
|
||||||
String propertyName = parameter.getName();
|
String propertyName = parameter.getName();
|
||||||
ResolvableType type = parameter.getType();
|
ResolvableType type = parameter.getType();
|
||||||
return propertyBinder.bindProperty(propertyName, Bindable.of(type));
|
return propertyBinder.bindProperty(propertyName, Bindable.of(type).withAnnotations(parameter.getAnnotations()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Bean {
|
private static final class Bean {
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package org.springframework.boot.context.properties.bind;
|
package org.springframework.boot.context.properties.bind;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
|
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
|
||||||
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
|
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
|
||||||
import org.springframework.boot.context.properties.source.MockConfigurationPropertySource;
|
import org.springframework.boot.context.properties.source.MockConfigurationPropertySource;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -137,6 +139,16 @@ class ConstructorParametersBinderTests {
|
||||||
assertThat(bean.getCustomList()).containsOnly("x,y,z");
|
assertThat(bean.getCustomList()).containsOnly("x,y,z");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void bindWithAnnotations() {
|
||||||
|
MockConfigurationPropertySource source = new MockConfigurationPropertySource();
|
||||||
|
source.put("foo.date", "2014-04-01");
|
||||||
|
this.sources.add(source);
|
||||||
|
ConverterAnnotatedExampleBean bean = this.binder.bind("foo", Bindable.of(ConverterAnnotatedExampleBean.class))
|
||||||
|
.get();
|
||||||
|
assertThat(bean.getDate().toString()).isEqualTo("2014-04-01");
|
||||||
|
}
|
||||||
|
|
||||||
public static class ExampleValueBean {
|
public static class ExampleValueBean {
|
||||||
|
|
||||||
private final int intValue;
|
private final int intValue;
|
||||||
|
@ -265,4 +277,18 @@ class ConstructorParametersBinderTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ConverterAnnotatedExampleBean {
|
||||||
|
|
||||||
|
private final LocalDate date;
|
||||||
|
|
||||||
|
ConverterAnnotatedExampleBean(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getDate() {
|
||||||
|
return this.date;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue