我遇到了一个轻微的问题,即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
}
在启动过程中,我收到以下错误消息:
错误[main] SpringApplication - 应用程序启动失败 org.springframework.beans.factory.BeanCreationException:创建名为'workflowRunnerProperties'的bean时出错:无法将属性绑定到WorkflowRunnerProperties(prefix = input,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]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [input.correctionTargets,correctionTargets];参数[];默认消息[correctionTargets]];默认消息[请提供包含参数目标的文件--input.correctionTargets] 字段'libraryTargets'上对象'input'中的字段错误:被拒绝的值[null];代码[NotNull.input.libraryTargets,NotNull.libraryTargets,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [input.libraryTargets,libraryTargets];参数[];默认消息[libraryTargets]];默认消息[请提供包含参数目标的文件--input.libraryTargets] at 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 :(得分: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 目标的文件