2012-02-21 49 views
2

我一直在试图做一个自定义的验证器,所以我可以对特定的类(java.util.Calendar或CommandItem在这种情况下)使用@NotEmpty注解。但我得到一个异常:扩展@NotEmpty接受其他类

javax.validation.UnexpectedTypeException: No validator could be found for type: com.bla.DocumentCommandItem 

现在,我能想到的,为什么它不工作的唯一的事情是,@NotEmpty注解本身声明此:

@Constraint(validatedBy = { }) 

因此,有与Validator类没有直接关联。但是,它如何验证字符串和集合呢?

这是我的Validator类:

public class DocumentNotEmptyExtender implements ConstraintValidator<NotEmpty,DocumentCommandItem> { 

@Override 
public void initialize(NotEmpty annotation) { 
} 

@Override 
public boolean isValid(DocumentCommandItem cmdItem, ConstraintValidatorContext context) { 
    if (!StringUtils.hasText(cmdItem.getId()) && (cmdItem.getFilename() == null || cmdItem.getFilename().isEmpty())) { 
     return false; 
    } else { 
     return true; 
    } 
} 

}

这甚至可能吗?

(作为一个侧面说明...我也收到这个异常时我正在我自己的类似注解,但一个神秘消失。)

谢谢!

回答

3

你需要注册一个约束映射文件这样你的验证:

<constraint-mappings 
    xmlns="http://jboss.org/xml/ns/javax/validation/mapping" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
     "http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"> 

    <constraint-definition annotation="org.hibernate.validator.constraints.NotEmpty"> 
     <validated-by include-existing-validators="true"> 
      <value>com.foo.NotEmptyValidatorForDocumentCommandItem</value> 
     </validated-by> 
    </constraint-definition> 
</constraint-mappings> 

这个映射文件必须在META-INF/validation.xml注册:

<validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"> 

    <constraint-mapping>/your-mapping.xml</constraint-mapping> 
</validation-config> 

您可以了解更多的Hibernate验证reference guide和Bean Validation specification

+0

我已经试过您的解决方案。 XML被加载,但我仍然得到相同的错误。奇怪的事情正在发生,虽然...在启用此软件包的跟踪信息后,在tomcat启动期间,以下两行显示出5次: '[] 10:13:35,670 [main] INFO org.hibernate.validator.xml.ValidationXmlParser - META-INF/validation。找到xml。 [] 10:13:35,694 [main] DEBUG org.hibernate.validator.xml.ValidationXmlParser - 试图打开META-INF/validators.xml的输入流。' – Jinx 2012-02-22 09:17:09

+0

解决了它。其他信息如下。 – Jinx 2012-02-22 10:10:40

2

溶液通过@Gunnar

上面列出它引起几unexepected东西虽然...

NotEmpty是基本上为@NotNull和@Size(分= 1)的约束的包装。所以没有实际的@NotEmpty实现。

做了DocumentCommandItem我自己@NotEmpty实施造成两两件事:

  • 验证触发NOTNULL和尺寸验证(因而用于大小DocumentCommandItem组合
  • 更重要的是“没有发现验证”,大小字符串验证开始失败,因为它不能为它找到一个实现

所以我对这个问题的最终解决方案:

做一个@Size实施DocumentCommandItem 而 让弦乐

一个@NotEmpty实现

(也可能是我不得不做出另一个@NotEmpty托收)

相关问题