springmvc的@Validated注解使用


https://blog.csdn.net/changerzhuo_319/article/details/55804651

. 校驗的錯誤信息, 可以直接在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, 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;
}
}

測試結果:
只校驗沒有分組的屬性

 

校驗UserGroup1組的屬性

 

 

點贊 2
收藏
分享

————————————————
版權聲明:本文為CSDN博主「changerzhuo」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/changerzhuo_319/java/article/details/55804651

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM