2016-07-13 3 views
0

У меня небольшая проблема, что весенняя загрузка предоставляет мне абсолютно запутанные сообщения об ошибках, которые ни один из моих клиентов не может или не поймет.spring boot cli достойное сообщение об ошибке

, например:

это мой класс свойство конфигурации

@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»: не удалось связать свойства с WorkflowRunnerProper (prefix = input, ignoreInvalidFields = false, ignoreUnknownFields = true, ignoreNestedProperties = false); Вложенное исключение - org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult: 2 ошибки Ошибка поля в объекте 'input' в поле 'correctionTargets': отклоненное значение [null]; коды [NotNull.input.correctionTargets, NotNull.correctionTargets, NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: коды [input.correctionTargets, correctionTargets]; аргументы []; сообщение по умолчанию [correctionTargets]]; сообщение по умолчанию [укажите файл, содержащий ваши цели для параметра --input.correctionTargets] Ошибка поля в объекте «вход» в поле «libraryTargets»: отклоненное значение [null]; коды [NotNull.input.libraryTargets, NotNull.libraryTargets, NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: коды [input.libraryTargets, libraryTargets]; аргументы []; сообщение по умолчанию [libraryTargets]]; сообщение по умолчанию [укажите файл, содержащий ваши цели для параметра --input.libraryTargets] на org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization (ConfigurationPropertiesBindingPostProcessor.java:339) на org.springframework.boot.context .properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization (ConfigurationPropertiesBindingPostProcessor.java:289) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization (AbstractAutowireCapableBeanFactory.java:408) ...

который хорош, но обеспечивает так много информации, что она побеждает цель, а л я хочу видеть это:

пожалуйста, предоставьте файл, содержащий ваши цели для --input.correctionTargets параметров укажите файл, содержащий ваши цели для параметра --input.libraryTargets

, что было бы самый простой способ поймать это исключение и только зарегистрировать актуальную информацию для пользователя, не подавляя его со всеми материалами разработчика.

благодаря

+0

Приложение сломано (из того, что я вижу из вашего стека), поэтому сообщение об ошибке, которое вы пытаетесь изолировать, не произойдет. – Makoto

+0

спасибо, но как этот ответ связан? Я просил получить прямой доступ к исключению и не получить весь весной stacktrace, поэтому я могу предоставить пользователю достойное понятное сообщение об ошибке, а не весь весной stacktrace. – 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

Смежные вопросы