Merge branch '2.2.x'

Closes gh-19598
pull/19602/head
Madhura Bhave 5 years ago
commit ed4261a61c

@ -21,9 +21,10 @@ package org.springframework.boot.context.properties.bind;
*
* @author Phillip Webb
* @author Madhura Bhave
* @since 2.2.3
* @see DataObjectBinder
*/
abstract class DataObjectPropertyName {
public abstract class DataObjectPropertyName {
private DataObjectPropertyName() {
}
@ -33,7 +34,7 @@ abstract class DataObjectPropertyName {
* @param name the source name
* @return the dashed from
*/
static String toDashedForm(String name) {
public static String toDashedForm(String name) {
StringBuilder result = new StringBuilder();
String replaced = name.replace('_', '-');
for (int i = 0; i < replaced.length(); i++) {

@ -28,6 +28,7 @@ import org.springframework.boot.context.properties.bind.AbstractBindHandler;
import org.springframework.boot.context.properties.bind.BindContext;
import org.springframework.boot.context.properties.bind.BindHandler;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.DataObjectPropertyName;
import org.springframework.boot.context.properties.source.ConfigurationProperty;
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
import org.springframework.core.ResolvableType;
@ -187,7 +188,7 @@ public class ValidationBindHandler extends AbstractBindHandler {
}
private ConfigurationPropertyName getName(String field) {
return this.name.append(field);
return this.name.append(DataObjectPropertyName.toDashedForm(field));
}
ValidationErrors getValidationErrors() {

@ -193,6 +193,14 @@ class ValidationBindHandlerTests {
.satisfies((ex) -> assertThat(ex.getCause()).hasMessageContaining("years"));
}
@Test
void validationErrorsForCamelCaseFieldsShouldContainRejectedValue() {
this.sources.add(new MockConfigurationPropertySource("foo.inner.person-age", 2));
BindValidationException cause = bindAndExpectValidationError(() -> this.binder
.bind(ConfigurationPropertyName.of("foo"), Bindable.of(ExampleCamelCase.class), this.handler));
assertThat(cause.getMessage()).contains("rejected value [2]");
}
private BindValidationException bindAndExpectValidationError(Runnable action) {
try {
action.run();
@ -305,6 +313,33 @@ class ValidationBindHandlerTests {
}
@Validated
static class ExampleCamelCase {
@Valid
private InnerProperties inner = new InnerProperties();
InnerProperties getInner() {
return this.inner;
}
static class InnerProperties {
@Min(5)
private int personAge;
int getPersonAge() {
return this.personAge;
}
void setPersonAge(int personAge) {
this.personAge = personAge;
}
}
}
@Validated
static class ExampleValidatedBeanWithGetterException {

Loading…
Cancel
Save