在 SpringMVC 中对表单提交参数进行验证(使用 Bean Validator)
2017-12-02 22:40
555 查看
前言
在 SpringMVC 项目中,有时需要对前端页面上传的表单参数进行一定的限制,包括不为空或者长度等。在控制器的各种方法中进行诸如如下方式的判断势必造成大量重复的代码if( null != username && (!username.isEmpty()){ ...... }else if( null != password && (!password.isEmpty()){ ...... }else if( null != phone && (!phone.isEmpty()){ ...... } ......
Bean Validator
Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。这里我们使用 Hibernate Validator 作为上述问题的解决方案
SpringMVC 中使用 Hibernate Validator
在合适的位置新建一个 ValidatorConfig 类,以 Java Config 的方式对 LocalFactoryBean 进行配置import org.hibernate.validator.HibernateValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; /** * 配置 Hibernate Validator * Created by James on 17-12-2. */ @Configuration public class ValidatorConfig { @Bean(name = "validator") public LocalValidatorFactoryBean getValidator() { LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); bean.setProviderClass(HibernateValidator.class); return bean; } }
定义 Java Bean 实体类
import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import me.zbl.fullstack.consts.DataConsts; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; @NoArgsConstructor @Getter @Setter public class UserRegisterForm { @Length(max = 10) @NotEmpty(message = "用户名不能为空") private String username; @Length(max = 10) @NotEmpty(message = "密码不能为空") private String password; @NotEmpty(message = "请再次确认密码") private String confirmpassword; }
Bean Validation 中内置的约束注解
@Null 被注释的元素必须为 null@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
在 Controller 中对参数绑定结果进行验证
/** * 表单提交 */ @PostMapping("/register.form") public String fFrontUserRegister(@Valid UserRegisterForm registerForm, BindingResult bindingResult) { if (bindingResult.hasErrors()) { List<ObjectError> errors = bindingResult.getAllErrors(); // 此处可以对 errors 进行遍历获取错误消息 return "error"; ...... } ...... return "success"; }
相关文章推荐
- 在使用django 的过程中难免的会使用到format表单进行提交,如果出现“CSRF验证失败. 相应中断”.该如何解决呢?
- 使用js进行表单验证提交
- struts中使用token进行表单重复提交的验证
- liferay中使用jQuery Validation Engine进行ajax验证,不通过也提交表单的解决方案
- 如何使用AngularJS对表单提交内容进行验证
- SpringMVC中使用bean来接收form表单提交的参数时的注意点
- 使用jquery validate和ajax进行表单验证并向后台提交数据
- 表单提交前使用属性onsubmit进行拦截验证
- 使用JavaScript进行表单提交前的验证
- jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).
- Spring--SpringMVC中使用bean来接收form表单提交的参数时的注意点
- springmvc使用JSR-303进行表单验证不生效的问题
- 使用ValidForm进行表单验证,结合SpringMVC检验用户名是否存在
- 使用AngularJS对表单提交内容进行验证的操作方法
- 再说表单验证,在Web Api中使用ModelState进行接口参数验证
- 基于springmvc的利用ajax进行表单异步提交(使用FormData方法)
- SpringMVC 使用JSR-303进行校验Bean Validation-------方法参数、返回值验证
- SpringMVC中使用bean来接收form表单提交的参数时的注意点
- 使用图片作为提交按钮调用Javascript验证表单
- 在Struts2使用集合对象保存表单提交参数