springmvc的@Validated註解使用
阿新 • • 發佈:2020-01-07
1. 校驗的錯誤資訊, 可以直接在bean屬性上配置, 也可以在properties中配置。
2. 將校驗器bean配置到註解驅動上
3. 在需要校驗的pojo前邊新增@Validated,在需要校驗的pojo後邊新增BindingResult bindingResult接收校驗出錯資訊
注意:@Validated和BindingResult bindingResult是配對出現,並且形參順序是固定的(一前一後)。
使用validated所需配置:
1. jar包
2. application.xml
<!-- validated 校驗配置start --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" > <!-- 提供檢驗機制的類: 此處用的而是Hibernate校驗器,但是跟Hibernate沒有關係 --> <property name="providerClass" value="org.hibernate.validator.HibernateValidator" /> <!-- 指定校驗的使用的資原始檔,如果不需要額外的錯誤配置檔案,就不用配置該屬性, 在配置檔案中配置k-v的錯誤提示資訊,如果不指定則使用預設配置:classpath下的ValidationMessages.properties --> <property name="validationMessageSource" ref="messoreSources" /> </bean> <!-- 額外錯誤資訊檔案配置--> <bean id="messoreSources" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 錯誤資訊資原始檔, 不需要寫字尾, 預設字尾為.properties --> <property name="basenames"> <list> <value>classpath:testErrMessages</value> </list> </property> <!-- 錯誤資訊檔案編碼方式 --> <property name="fileEncodings" value="utf-8" /> <!-- 錯誤資訊檔案快取時間 --> <property name="cacheSeconds" value="120" /> </bean> <!-- validated 校驗配置end --> <!-- 註解驅動,替換處理器對映器、處理器介面卡 --> <mvc:annotation-driven validator="validator" />
3. testErrMessage.properties檔案
檔案結構:
檔案內容:
4. bean的配置, 省略get/set方法
public class ValidBean { //直接配置錯誤資訊 @NotBlank(message="使用者名稱不能為空",groups= {UserGroup1.class}) private String name; @Max(value=120,message="年齡最大為120") private Integer age; // 使用配置檔案中的錯誤資訊, properties中的key: message="{key}"。 {}:佔位符 @NotBlank(message="{validator.user.address}") private String address; }
5. controller
@Controller @RequestMapping("/test/") public class ValidTestController { /** * * @desc: 校驗沒有分組的屬性 * @auth: zona * 2017年2月19日 下午2:35:42 * @param bean * @param bindingResult * @return */ @RequestMapping("valid") @ResponseBody public Result testValid(@Validated ValidBean bean,BindingResult bindingResult) { Result result = new Result(); Map retMap = new HashMap(); StringBuilder sb = new StringBuilder(); if(bindingResult.hasErrors()) { List<ObjectError> errors = bindingResult.getAllErrors(); for (ObjectError err : errors) { sb.append(err.getDefaultMessage()+"; "); } result.setErrInfo(sb.toString()); result.setErrNo(1); return result; } retMap.put("bean",bean); result.success(); result.setData(retMap); return result; } /** * * @desc: 僅對屬於userGroup組的屬性進行校驗 * @auth: zona * 2017年2月19日 下午2:37:03 * @param bean * @param bindingResult * @return */ @RequestMapping("group/valid") @ResponseBody public Result testGroupValid(@Validated(value=UserGroup1.class) ValidBean bean,bean); result.success(); result.setData(retMap); return result; } }
測試結果:
只校驗沒有分組的屬性
校驗UserGroup1組的屬性
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。