2015-10-17 48 views
0

我試圖建立與驗證的映射請求點到我的數據傳輸對象發生的API。我在插入數據庫驅動的消息源時遇到問題。我的數據庫中的記錄有佔位符:消息插值不工作

id,oplock,code,msg,locale 
9,0,minmax_password,"Password length should be a minimum of {1} and maximum of {2}.","en" 

我有這樣的數據傳輸對象(應該映射到我的請求)與此屬性:

@NotBlank(message = "{notnull_password}") 
@Size(min = 6, max = 20,message = "{minmax_password}") 
private String password; 

這是我的XML設置:

<beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <beans:property name="validationMessageSource" ref="messageSourceServiceImp"/> 
</beans:bean> 

<mvc:annotation-driven validator="validator"> 
</mvc:annotation-driven> 

我刪除了MessageSource的實現爲簡潔,但提到它的數據庫驅動。現在,當我提交Password的請求不符合最低要求時,它會拋出一個錯誤,並調用MessageSource,它將返回記錄......迄今爲止非常好。我正在觀察的是,它隨後調用的MessageSource爲{1}(這是從的MessageSource的紀錄佔位符);我在想這個將由min從聲明@Size(min = 6, max = 20,message = "{minmax_password}")所取代。結果,這返回:

 "Password length should be a minimum of {1} and maximum of {2}." 

讓我知道如果我失去了什麼。

由於

回答

0

Hibernte驗證似乎不使用數字索引{1},{2},等等。因此,我不得不使用{分鐘},{MAX}。對於數據庫驅動的MessageSource,它通常返回一個MessageFormat對象。該對象需要數字索引而不是文本。使用{min}會拋出NumberFormatException,因爲它無法解析min。因此,你必須做的是將{min}放在單引號中;這會告訴MessageFormat忽略該部分。例如:

9,0,minmax_password,"Password length should be a minimum of '{min}' and maximum of '{max}'.","en" 

希望這會有所幫助。