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

猜你喜欢

转载自www.cnblogs.com/zhoading/p/12624003.html