繁体   English   中英

Spring Boot CLI体面错误消息

[英]spring boot cli decent error message

我有一个小问题,就是Spring Boot向我提供了绝对复杂的错误消息,我的客户都无法理解或将不会理解。

例如:

这是我的属性配置类

@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
}

在启动过程中,我收到以下错误消息:

错误[主要] SpringApplication-应用程序启动失败org.springframework.beans.factory.BeanCreationException:创建名称为'workflowRunnerProperties'的bean时出错:无法将属性绑定到WorkflowRunner属性(前缀=输入,ignoreInvalidFields = false,ignoreUnknownFields = true,ignoreNestedProperties = 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:代码[input.correctionTargets,correctionTargets]; 参数[]; 默认消息[correctionTargets]]; 默认消息[请提供一个包含参数--input.correctionTargets的目标的文件]域'libraryTargets'上的对象'input'中的域错误:拒绝值[null]; 代码[NotNull.input.libraryTargets,NotNull.libraryTargets,NotNull]; 参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[input.libraryTargets,libraryTargets]; 参数[]; 默认消息[libraryTargets]]; 默认消息[请提供包含参数--input.libraryTargets的目标的文件],位于org.springframework.boot.context.properties,位于org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:339)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)处的。

很好,但是提供了太多的信息,使它无法达到目的,相反,我想要看到的是:

请提供一个包含参数--input.correctionTargets目标的文件请提供一个包含参数--input.libraryTargets目标的文件

捕获此异常并仅记录用户的实际相关信息,而又不让开发人员感到不知所措的最简单方法是什么。

谢谢

到目前为止,我发现的最佳方法是捕获所有相关异常并将其注销到控制台,如下所示:

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的目标的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM