Java 自定义表单验证批注不工作

Java 自定义表单验证批注不工作,java,spring,spring-mvc,annotations,bean-validation,Java,Spring,Spring Mvc,Annotations,Bean Validation,我创建了一个自定义表单验证注释,以检查表单中填写的日期是否为dd/MM/yyyy格式。不幸的是,它不起作用,我尝试的任何日期格式的验证都失败了。起初我认为问题在于我用于测试的正则表达式,但在做了一些测试之后,我非常确定它是有效的 我错过了什么?这是我的代码(我只复制相关部分),请帮助我理解我做错了什么: bean Articolo(注意:该类嵌套在模型类NewEditArticle中,如下所示) 类是有效的 @Documented //mandatory @Constraint (validat

我创建了一个自定义表单验证注释,以检查表单中填写的日期是否为dd/MM/yyyy格式。不幸的是,它不起作用,我尝试的任何日期格式的验证都失败了。起初我认为问题在于我用于测试的正则表达式,但在做了一些测试之后,我非常确定它是有效的

我错过了什么?这是我的代码(我只复制相关部分),请帮助我理解我做错了什么:

bean Articolo(注意:该类嵌套在模型类NewEditArticle中,如下所示)

类是有效的

@Documented //mandatory
@Constraint (validatedBy= DateValidator.class) //this class contains the validation logic
@Retention (RetentionPolicy.RUNTIME) //mandatory
public @interface IsValidDate {

    //error message
    String message() default "Please insert date in format dd/mm/yyyy";

    Class <?>[] groups() default {}; //mandatory

    Class <? extends Payload> [] payload () default {}; //mandatory
}
Spring-dispatcher-servlet.xml

<bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" />
    </bean>

您可以在不使用正则表达式的情况下执行此操作。Spring具有
@DateTimeFormat
注释。在您的模型中,执行以下操作

@NotNull(message = "Please enter Birth Date")
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date birthDate;
您可以添加自定义错误消息。在资源文件夹下创建
message.properties
。在该文件中:

typeMismatch=Invalid date format
重要的一点是将其添加到配置类中

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}

您的类路径上是否有bean验证实现。。。如果没有它,什么都不会发生。你解决了你的问题吗?不是真的,我不确定你说的bean验证实现是什么意思……你能解释更多吗?我在帖子中添加了我的Spring-dispatcher-servlet.xml。使用你建议的基于注释的验证,我总是会收到默认错误消息,例如,如果忽略message.properties文件。我的猜测是,自定义错误消息不适用于嵌套对象的验证,就像我的情况一样(bean类文章是模型类NewEditArticle的一个字段,它在控制器类中进行验证并自动连接到表单)。
<bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" />
    </bean>
@NotNull(message = "Please enter Birth Date")
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date birthDate;
typeMismatch=Invalid date format
@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}