2012-07-18 90 views
4

嗨在我的春季webapp中,我有一個密碼變量,我希望它至少爲0個字符或多於6個,少於20個。我知道有註釋:@Size(min,max)但不是必需的

@Size(min=6, max=20) 

但我不知道如何添加密碼可以是0個字符的可能性。有人會幫助我嗎?

+0

你想要** **空密碼**或** 6到20個字符長度,正確嗎?你在Spring MVC控制器中使用hibernate-validator嗎? – Xaerxess 2012-07-18 21:34:18

+0

是的,這是正確的。 – 2012-07-19 05:52:08

回答

4

給出評論,您可以使用StringTrimmerEditor將空字符串轉換爲空,然後@Size檢查將不會觸發(null在@Size中被視爲有效)。

在您的控制器添加下面的方法:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 
} 

注意StringTrimmerEditor也修剪輸入從空間,如果你只想要一個屬性通過這個編輯器來影響使用registerCustomEditor(Class<?> requiredType, String propertyPath, PropertyEditor propertyEditor)

+0

其工作表示感謝。但是,你可以寫我的變量propertyPath的例子。它只是控制器中輸入或變量的名稱? – 2012-07-19 21:11:32

0

我想你想要一個可爲空的字段,但也可能是min6和max20。 AFAIK,@Size只能在該字段非空時激活。

5

如果你想有一個字符串,它是空的(「」)或6之間,20個字符長,您可以指定使用@Pattern正則表達式約束條件:

@Pattern(regexp="(^$|.{6,20})") 
+0

我接受了以前的答案,因爲它正在工作,只是更早,但謝謝你的解決方案。 – 2012-07-19 21:12:02

+0

優雅,但您無法獲取(本地化)消息中的最小值和最大值。 – 2013-11-25 13:39:49