首页 > 解决方案 > 如何仅获取嵌套的异常消息表单弹簧验证?

问题描述

语境

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <org.springframework.boot.version>2.1.6.RELEASE</org.springframework.boot.version>
    <mysql-connector-java.version>8.0.15</mysql-connector-java.version>
    <org.apache.tomcat.embed.version>9.0.12</org.apache.tomcat.embed.version>
    <hibernate-validator.version>6.0.13.Final</hibernate-validator.version>
    <javax.el.version>3.0.0</javax.el.version>
    <jstl.version>1.2</jstl.version>
    <java.version>1.8</java.version>
</properties>

我已经准备好了BigDecimalEditor类,它可以扩展PropertyEditorSupport并且工作正常 - 它NumberFormatException从被覆盖的setAsText(String text)方法中抛出。接下来我准备好CustomBindingErrorProcessor了,它扩展DefaultBindingErrorProcessor了方法processPropertyAccessException(PropertyAccessException accessException, BindingResult bindingResult)被覆盖的地方,如下所示:

   public void processPropertyAccessException(PropertyAccessException accessException, 
                                           BindingResult bindingResult) {

    // overwrites NumberFormatException error message
    if(accessException.getCause() instanceof NumberFormatException){

        String fieldName = accessException.getPropertyChangeEvent().getPropertyName();
        String exceptionError = accessException.getCause().getMessage();

        FieldError fieldError = new FieldError(fieldName,
                                               "BINDING_ERROR", 
                                               fieldName + ": " + exceptionError);

        bindingResult.addError(fieldError);
    }else{
        super.processPropertyAccessException(accessException, bindingResult);
    }

} 

它仍然显示(接近验证的表单字段)这么长的消息:

无法将 java.lang.String 类型的属性值转换为属性高度所需的 java.math.BigDecimal 类型;嵌套异常是 java.lang.NumberFormatException:无法识别的数字!

例如,如果文本包含两个逗号。

问题是 - 如何仅获取嵌套异常的消息“无法识别的号码!”

标签: springhibernatevalidationnumberformatexception

解决方案


这里有一个关于它的链接链接这里

我能够解决它,因为 messages.properties 添加: typeMismatch.object.camp=something wrong


推荐阅读