当前位置: 首页 > 知识库问答 >
问题:

Spring Bootcli体面的错误消息

殷轶
2023-03-14

我有一个小问题,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.BeanCreation异常:创建名为“workflowRunnerProperties”的 Bean 时出错:无法将属性绑定到 WorkflowRunnerProperties (前缀 = input, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false);嵌套异常是 org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 2 错误 字段“correctionTarget”上的对象“输入”中的字段错误:拒绝值 [null];codes [NotNull.input.correctionTargets,NotNull.correctionTargets,NotNull];参数 [org.springframework.context.support.DefaultMessageSourceResolvevable: codes [input.correctionTargets,correctionTargets]; 参数 []; 默认消息 [correctionTargets]];默认消息 [请提供包含参数目标的文件 --input.correctionTargets] 字段“libraryTargets”上的对象“输入”中的字段错误:拒绝值 [null];codes [NotNull.input.libraryTargets,NotNull.libraryTargets,NotNull];参数 [org.springframework.context.support.DefaultMessageSourceResolvevable: codes [input.libraryTargets,libraryTargets]; 参数 []; 默认消息 [libraryTargets]];默认消息 [请提供一个包含参数目标的文件 --input.libraryTargets] 在 org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:339) at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:289) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408) ...

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

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

捕获此异常并仅记录用户的实际相关信息的最简单方法是什么,而不会用所有开发人员的东西压倒他。

谢谢

共有1个答案

危晨
2023-03-14

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

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

 类似资料:
  • 问题内容: 抱歉,这个问题以前是否已经解决过。如果可以,请将我链接到该文件,但到目前为止,我还没有找到满意的答案。 我一直在寻找能使我的javax验证提供的错误消息更具体的方法。 在ValidationMessages.properties文件中指定了我目前用于@Min批注的消息: 并按预期打印 我想要的是消息还包括验证失败的变量(和类)的名称以及失败的变量的值。所以更像。 任何帮助将不胜感激。

  • 我得到这样的错误消息:线程“awt-eventqueue-0”org.apache.jena.riot.riotexception:[line:1,col:1]Prolog中不允许内容。当我试图通过NetBeans用java加载本地本体文件时?请问这是什么意思,我该怎么做?

  • 这个问题已经问了好几次了,我跟着这些问题试图解决这个问题。该项目成功构建并运行了几个小时前我关闭了电脑。这个问题让我抓狂,请帮助。 留言: build.gradle: 请帮忙。

  • 在本章中,我们将讨论在使用SLF4J时获得的各种错误消息或警告以及这些消息的原因/含义。 无法加载类“org.slf4j.impl.StaticLoggerBinder”。 这是在类路径中没有提供SLF4J绑定时引起的警告。 以下是完整的警告 - 要解决此问题,需要添加任一日志框架绑定。本教程上一小节对此进行了解释说明。 注 - 这种情况发生在SLF4J的版本中,介于1.6.0和1.8.0-bet

  • 问题内容: 这是我的代码片段: 这应该给我一个错误,因为这些表甚至不存在。但是我得到的是: 数组([0] => 00000) 如何获得对该错误的更好描述,以便可以调试问题? 问题答案: 尝试以下方法: 在准备之前添加以下内容: 这将更改PDO错误报告类型,并在出现PDO错误时使其发出警告。尽管应该设置您的errorInfo,但它应该可以帮助您进行跟踪。

  • 我正在使用Eclipse将json隐藏到Java中的字符串中。但我一直收到: 有人能告诉我json有什么问题吗?我如何改变它使其有效?我对java和json相当陌生,如果我错过了任何应该包括的细节,我很抱歉。