springmvc的@Validated注解使用

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, 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组的属性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用SpringMVC的@Validated注解验证的实现

    1.SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 edit.username.null=用户名不能为空 edit.password.size=密码最少{min}位,最长{max}位 ...... 可以将edit.username.null与edit.password.size看为参数,在message中传递,具体请看第二步. 第二步:Bean实体类中加注解

  • springmvc的@Validated注解使用

    1. 校验的错误信息, 可以直接在bean属性上配置, 也可以在properties中配置. 2. 将校验器bean配置到注解驱动上 3. 在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息 注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后). 使用validated所需配置: 1. jar包 2. application.

  • @validated注解异常返回JSON值方式

    目录 @validated注解异常返回JSON值 使用@Valid注解,对其参数错误异常的统一处理 @validated注解异常返回JSON值 @ControllerAdvice public class ValidParamExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public Map<String, Object> allExceptionHandler(Exception e){

  • spring springMVC中常用注解解析

    一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans&q

  • Java使用@Validated注解进行参数验证的方法

    目前项目中大部分代码进行参数验证都是写代码进行验证,为了提升方便性和代码的简洁性,所以整理了下使用注解进行参数验证.使用效果如下: // 要验证的实体类 @Data public class User implements Serializable { @NotBlank(message = "id不能为空!",groups = Update.class) protected String id = ""; @NotBlank(message = "商户i

  • spring @Validated 注解开发中使用group分组校验的实现

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是随着业务的复杂度增加,对于校验的制定也越来越有要求,这个时候就需要引入分组group的概念,在自定义注解@Validated中 定义了一个Class[]数组用来分组.这样我们就可以引入分组校验的概念,首先根据需要的分组新建自己的接口. 然后在需要校验的bean上加入分组: 最后根据需要,在Contr

  • SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 2.解释一下注解的作用 @N

  • 解决SpringMVC使用@RequestBody注解报400错误的问题

    一般使用@RequestBody接收的时候报400都是传入的json字符串和对应封装的对象不对应造成的 首先要注意 封装的对象中的字段类型有没有Date类型或者int等类型的,如果有的话,在set方法中统一将传入的参数要调整为String类型 在set方法中进行参数的转换 比如有一个Date类型的字段 private Date startTime; public Date getStartTime() { return startTime; } public void setStartTime(

  • SpringMVC中RequestMapping注解(作用、出现的位置、属性)

    RequestMapping注解 作用出现位置属性 作用 用于建立请求 URL 和处理请求方法之间的对应关系. 出现位置 1.作用在类上:请求 URL 的第一级访问目录.此处不写的话,就相当于应用的根目录.写的话需要以/开头. 2.作用在方法上:请求 URL 的第二级访问目录. 控制器中部分代码示例: @Controller @RequestMapping(path = "/user") //第一级的访问目录 public class HelloController { @Reques

  • SpringMVC 如何使用注解完成登录拦截

    为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.s

随机推荐