【问题标题】:Spring bean validation won't replace message for typeMismatch errorsSpring bean 验证不会替换 typeMismatch 错误的消息
【发布时间】:2012-06-30 04:57:38
【问题描述】:

我为我的LocalValidatorFactoryBean 创建了一个自定义MessageInterpolator,但由于某种原因,没有typeMismatch 错误传入其中。我使用的所有其他验证器,如 @NotNull@Size@Pattern 等,都按预期显示。

我遇到了一个无法向用户显示的非常丑陋的错误:

无法将类型“java.lang.String”的属性值转换为属性“数据”所需的类型“org.springframework.web.multipart.MultipartFile”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.lang.String] 的值转换为属性“数据”所需的类型 [org.springframework.web.multipart.MultipartFile]:找不到匹配的编辑器或转换策略”

澄清:我故意发送String 而不是文件来触发typeMismatch 错误。我的目标是使用人性化的错误消息而不是异常文本来优雅地处理这种验证错误。

相关版本信息:

  • 验证-api 1.0.0.GA
  • hibernate-validator 4.3.0.Final
  • spring-* 3.1.1.RELEASE

感谢您的帮助!

【问题讨论】:

    标签: java spring spring-mvc bean-validation hibernate-validator


    【解决方案1】:

    由于您正在处理Multipart 参数,我怀疑您正在实现文件上传。你配置了multipartResolver吗?

    默认情况下,Spring 不进行多部分处理 [...]。您可以通过将多部分解析器添加到 Web 应用程序的上下文来启用 Spring 多部分处理。

    请注意,如果您使用的是 Apache Commons 或 Servlet 3.0,则配置会有所不同。

    其他可能的原因:

    • 请求不包含多部分(不发送文件)
    • 请求 uri 错误(它是用于其他处理程序方法的)

    【讨论】:

    • 是的,我有multipartResolver。对于不清楚我实际上是否成功接收文件,我深表歉意。 (我将更新 OP 以注意这一点。)我故意发送字符串而不是文件来导致 typeMismatch 验证错误。我的目标是优雅地处理错误。错误显示在 BindingResult 对象中并显示所有可能的代码,但它们没有映射到正确的消息。
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2014-09-23
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多