From 9c8d2c8016e6a46b2e3239caff24cc13587e4d67 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 4 Jun 2018 16:26:43 +0100 Subject: [PATCH] Improve analysis of bind failures caused by a conversion failure Closes gh-13357 --- .../diagnostics/analyzer/BindFailureAnalyzer.java | 6 ++++++ .../analyzer/BindFailureAnalyzerTests.java | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) 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; }