2012-02-21 108 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託收)

相關問題