2016-07-13 6 views
0

私は、春のブートが私の顧客の誰も理解できない、または理解できない絶対に複雑なエラーメッセージを私に提供しているというわずかな問題があります。例えばspring boot cli decentエラーメッセージ

これは

@Component 
@ConfigurationProperties(prefix = "input") 
class WorkflowRunnerProperties{ 

    @Valid 
    @NotNull(message = "please provide a file containing your targets for the parameter --input.libraryTargets") 
    val libraryTargets:File = null 

    @Valid 
    @NotNull(message = "please provide a file containing your targets for the parameter --input.correctionTargets") 
    val correctionTargets:File = null 
} 

そして、私は、このエラーメッセージが表示され、起動時に私の財産の設定クラスです:

ERROR [メイン] SpringApplication - アプリケーションの起動は を失敗しましたorg.springframework.beans.factory.BeanCreationException: 'workflowRunnerProperties'という名前のBeanを作成中にエラーが発生しました:WorkflowRunnerProperにプロパティをバインドできませんでした結び付き(接頭辞=入力、無視する無効なフィールド= false、無視する不明瞭なフィールド= true、無視するプロパティ付き= false)。入れ子にされた例外はorg.springframework.validation.BindExceptionです:org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult:2エラー フィールド 'correctionTargets'のオブジェクト 'input'のフィールドエラー:拒否された値[null];コード[NotNull.input.correctionTargets、NotNull.correctionTargets、NotNull];引数[org.springframework.context.support.DefaultMessageSourceResolvable:codes [input.correctionTargets、correctionTargets];引数[];デフォルトのメッセージ[correctionTargets]];デフォルトメッセージ[パラメータ--input.correctionTargetsのターゲットを含むファイルを提供してください] 'libraryTargets'フィールドの 'input'オブジェクトのフィールドエラー:拒否された値[null];コード[NotNull.input.libraryTargets、NotNull.libraryTargets、NotNull];引数[org.springframework.context.support.DefaultMessageSourceResolvable:codes [input.libraryTargets、libraryTargets];引数[];デフォルトメッセージ[libraryTargets]];デフォルトメッセージ[パラメータ--input.libraryTargetsのターゲットを含むファイルを提供してください] at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:339) at org.springframework.boot.context org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408) で.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:289) ...いいですが、提供

目的を破るほど多くの情報、代わりに私が見たいと思ってlは次のとおりです。

パラメータ--input.correctionTargets のためのあなたの目標を含むファイルを提供してくださいどのようになるかのパラメータ--input.libraryTargets

のためのあなたの目標を含むファイルを提供してくださいこの例外をキャッチして、ユーザーの実際の関連情報のみをログに記録する最も簡単な方法です。すべての開発者の作業に圧倒されることはありません。

おかげ

+0

アプリケーションが壊れています(私はあなたのスタックを見ることができます)ので、分離しようとしているエラーメッセージは表示されません。 – Makoto

+0

ありがとうございますが、この回答はどのように関連していますか?私は例外に直接アクセスして、全体の春のスタックトレースを受け取らないように頼んでいたので、私は春のスタックトレース全体の代わりにまともな理解可能なエラーメッセージをユーザに提供することができます。 – berlinguyinca

答えて

0
私はこれまでのところ、すべての関連の例外をキャッチして、このようなコンソールにそれをログアウトされた

最善のアプローチ:

:このようなログ記録文で結果

object SimpleTargetRunner extends App with LazyLogging { 
    try { 
    val app = new SpringApplication(classOf[SimpleTargetRunner]) 
    app.setWebEnvironment(false) 
    val context = app.run(args: _*) 
    } 
    catch { 
    case x: BeanCreationException => 
     x.getMostSpecificCause match { 
     case y:BindException => 
      logger.info("dear user, we need you to provide a couple of parameters.  These are the errors we observed:") 
      y.getAllErrors.asScala.foreach{ error:ObjectError => 
      logger.info(s"${error.getDefaultMessage}") 
      } 
     } 
    } 
} 

あなた、私たちはあなたにいくつかのパラメータを提供する必要があります。これらは私たちが観察したエラーです: --inputパラメーターのターゲットを含むファイルを提供してください。libraryTargets パラメータ--input.correctionTargetsのターゲットを含むファイルを提供してください。