Spring mvc Hibernate表达式语言不工作

Spring mvc Hibernate表达式语言不工作,spring-mvc,el,hibernate-validator,Spring Mvc,El,Hibernate Validator,我正在使用spring+hibernate验证程序。我试图使用${validatedValue},但它不起作用。我的核心依赖项: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.5

我正在使用spring+hibernate验证程序。我试图使用${validatedValue},但它不起作用。我的核心依赖项:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.4</version>
        </dependency>
如果我在“指定的电子邮件地址:$validatedValue无效”消息中提供“thisIsNotEmail”作为电子邮件验证结果,则消息不是“指定的电子邮件地址:thisIsNotEmail无效”。有人知道它为什么不起作用吗?我试过WindFly10和Pivotal 3.1,但还是没有成功


我希望得到如下结果:

您能在此处尝试更改吗:

@Email(message = "Specified e-mail address: {validatedValue} is invalid.")
用大括号括起来的键名应该有效


希望对您有所帮助。

通过更改messageSource的配置解决。。我将useCodeAsDefaultMessage设置为true,该值应为false:

messageSource.setUseCodeAsDefaultMessage(false);
全豆:

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setUseCodeAsDefaultMessage(false);
        messageSource.setFallbackToSystemLocale(false);
        return messageSource;
    }

来自Hibernate验证程序的注释
@Email
在内部使用regexp。您是否尝试过使用这样的方式:
@Pattern(regexp=“\\w+([.-]?\\w+*@\\w+)([.-]?\\w+)*(.\\w{2,4}+)+”
?我不确定您是否理解正确。请查看我更新的问题。它返回我:“指定的电子邮件地址:validatedValue无效。”。这个问题是否与我的DTO有关?在这种情况下,我有一个@Valid Set电子邮件联系人;而价值就在电子邮件里面。我不认为它会导致这个问题。您的消息资源似乎无法加载,Hibernate无法识别它。你拿到这个了吗?!是的,我有消息源,它可以正确地与本地化一起工作。当我设置message=“{Email.contractorContactEmail.value}”时,它将从我的属性中获取正确本地化的消息,因此我想语法应该是[classname或some constraint]。[field或key]=[message value]。是的,但我想将此消息参数化为等于hibernate拒绝的值。我认为可以在消息中注入${validatedValue},因为它在这里:。问题是它对我不起作用……这是一个bug吗?我需要
setUseCodeAsDefaultMessage(true)
${validatedValue}
    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setUseCodeAsDefaultMessage(false);
        messageSource.setFallbackToSystemLocale(false);
        return messageSource;
    }