2012-03-26 66 views
0

我試圖驗證請求中的數字變量,我試圖實現的,此字段是非空和數字。我想爲空和轉換錯誤報告不同的錯誤。基於註釋的請求驗證

我試圖用org.springframework.format.annotation.NumberFormat

爲什麼不@NumberFormat沒有默認的郵件屬性?這有沒有原因被遺漏?我現在必須定製它,因爲我沒有使用消息資源包。

public class AddToJobsShortListWSRequest implements Serializable { 

@NumberFormat(style = NumberFormat.Style.NUMBER) 
@NotNull(message="ASL01") 
private Long userDetailId; 

控制器

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) { 

    ResponseEntity<String> response = null; 
    Set<Enum> enums = new HashSet<Enum>(); 
    AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class); 

    if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest)) 
    { 
     response = getBadRequestErrorResponseEntity(enums); 
    } 
    else{ 
..... 
} 

驗證

private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) { 
    BindException errors = new BindException(object, "object"); 

    validator.validate(object, errors); 

    @SuppressWarnings({"rawtypes"}) 
    List fieldErrors = errors.getFieldErrors(); 

    for (int i = 0; i < fieldErrors.size(); i++) { 
     if (fieldErrors.get(i) instanceof FieldError) { 
      String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage(); 
      enums.add(Enum.valueOf(enumClass, m)); 
     } 
    } 
} 

是否有任何其他基於註解的驗證適用嗎? 另外,驗證的順序是什麼,哪一個先踢,NumberFormat,NotNull?提前:)

+0

你可以發佈控制器的代碼和錯誤消息嗎? – 2012-03-26 11:22:24

+0

可能是http://stackoverflow.com/questions/149506/annotation-based-spring-bean-validation的重複問題 – kandarp 2012-03-26 11:25:00

回答

1

由於它沒有錯過 - 驗證只是更加簡單比你需要和Spring只支持消息的資源包的國際化設施。

因此對於你的特殊情況 - 它可能不是特別的 - 你需要一個特殊的實現。

也沒有保證的驗證順序。每個驗證必須處理所有它不處理的情況(所以數字驗證必須使用空值和空值,因爲其他驗證會檢查它)。例如,我可以找到基於註釋的驗證,可用於非常簡單的hello-world類型案例,如@NotNull@NotEmpty。對於其他一切,我更喜歡commons validator加上我自己的註釋,因爲這允許我定義我需要的應用程序的模式和常見驗證,並在必要時按照定義的順序運行它們。

+0

你是對的,我剛剛意識到,如果是這樣的話 - Spring只支持消息資源包作爲i18n設施。所以這是不同於jsr-303 謝謝 – 2012-03-26 15:15:08