diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzer.java index 6c4f6e30e8..582af50d58 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzer.java @@ -70,6 +70,12 @@ class BindFailureAnalyzer extends AbstractFailureAnalyzer { } private String getMessage(BindException cause) { + ConversionFailedException conversionFailure = findCause(cause, + ConversionFailedException.class); + if (conversionFailure != null) { + return "failed to convert " + conversionFailure.getSourceType() + " to " + + conversionFailure.getTargetType(); + } Throwable failure = cause; while (failure.getCause() != null) { failure = failure.getCause(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java index b3542a8575..a022935095 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/diagnostics/analyzer/BindFailureAnalyzerTests.java @@ -62,10 +62,10 @@ public class BindFailureAnalyzerTests { @Test public void bindExceptionDueToOtherFailure() { FailureAnalysis analysis = performAnalysis(GenericFailureConfiguration.class, - "test.foo.value=${BAR}"); - assertThat(analysis.getDescription()).contains(failure("test.foo.value", "${BAR}", + "test.foo.value=alpha"); + assertThat(analysis.getDescription()).contains(failure("test.foo.value", "alpha", "\"test.foo.value\" from property source \"test\"", - "Could not resolve placeholder 'BAR' in value \"${BAR}\"")); + "failed to convert java.lang.String to int")); } @Test @@ -187,13 +187,13 @@ public class BindFailureAnalyzerTests { @ConfigurationProperties("test.foo") static class GenericFailureProperties { - private String value; + private int value; - public String getValue() { + public int getValue() { return this.value; } - public void setValue(String value) { + public void setValue(int value) { this.value = value; }