springmvc @valid
JSR303是javaEE6中的一个子规范:Bean Validation。官方实现是HibernateValidatior。校验:
使用springmvc 的validate机制,需要引入validate-api.jar,slf4j-api-1.7.2.jar包.如果仅加入此包,尽管不报错,但不能执行校验。
因为springmvc仅仅只是支持JSR303 Bean Validation定义的校验规范,为此设置了接口,实现需要具体的类来实现。
常用实体类有 hibernate-validator-5.2.4.Final.jar 可对pojo对象进行校验,也可独立于hibernate-orm单独使用。。
添加自驱动即可加载。
<mvc:annotation-driven />
// https://mvnrepository.com/artifact/javax.validation/validation-api
compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
JSR303属性内容的可加校验注解:
@Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 @Length(min=, max=)
验证字符串的长度是否在给定的范围之内,包含两端 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则 数值检查:建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null @Min 验证 Number 和 String 对象是否大等于指定的值 @Max 验证 Number 和 String 对象是否小等于指定的值 @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 @Digits 验证 Number 和 String 的构成是否合法 @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage; @Valid递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=)
对象类添加校验:
/** appId **/
@Digits(fraction = 0, integer = 0, message="版本Id仅允许输入数字")
private Long appId; /** app类型. */
@NotNull(message="请选择应用类型")
@Pattern(regexp = "^debug|release$", message="应用类型仅可选择debug或release")
private String appType; /** app适用平台. */
@NotNull(message="请选择适用平台")
@Pattern(regexp="^android|ios$", message="应用平台仅可选择android或ios")
private String appPlatform; /** app名. */
@NotNull(message="请填写版本名称")
@Size(max=15, message="版本名称请控制在{1}字以内")
private String appName; /** 版本Code. */
@NotNull(message="请填写版本编号")
@Digits(fraction = 0, integer = 0, message="版本编码仅允许输入数字")
private Long versionCode; /** 版本Name. */
@NotNull(message="请填写版本名称")
@Size(max=15, message="版本名称请控制在{1}字以内")
private String versionName; /** 版本描述Description. */
@NotNull(message="请填写版本描述")
@Size(max=1000, message="版本描述请控制在{1}字以内")
private String versionDescription;
如果使用{1}这不起作用,就改为{min} {max}的形式
触发校验:
(@Valid MhrAppVersionDTO dto, BindingResult result)
判断及错误采集:
if(result.hasErrors()) {
// objectError 中 objectName 和defaultMessage属性比较有用
List<ObjectError> errorList = result.getAllErrors();
}
还可以手动触发校验,需要编写校验Utils来实现:
参考这篇文章:https://blog.csdn.net/jamesge2010/article/details/53610162
参考文章: springMVC中两种validation的简单使用(https://blog.csdn.net/lixiaoxiong55/article/details/51670882)
springmvc @valid的更多相关文章
- 【问题记录】springMVC @Valid使用不生效问题
问题描述 在网上找到如何使用@Valid注解后,就把用到的配置和jar包加上,然后测试发现一直不生效.下面是配置及解决方法 配置 1.引入依赖 2.添加相应的配置(springmvc配置文件) < ...
- springMVC @Valid不起作用
springmvc使用JSR-303进行表单验证不生效的问题 spring只是支持jsr-303验证,但却不提供jsr-303的实现,文档中提及了需要导入类如hibernate-validator等j ...
- SpringMVC @Valid,@RequestBody,@RequestParam标注参数时,进行Postman测试
@Valid(post请求) 可与@RequestBody一起使用 > (@RequestBody @Valid User user) @RequestBody(post请求) 这里的requi ...
- springmvc @Valid 接收实体类时出现bean为null的问题
这是因为传到后端之后,全部以全小写形式处理了 所以前端也需要把name设置为全小写,否则后端不识别,导致接收不到,导致为null
- SpringMVC 使用JSR-303进行校验 @Valid
注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...
- 秒杀系统-web
秒杀系统Web层主要涉及前端交互设计.Restful:url满足Restful设计规范.Spring MVC.bootstrap+jquery这四个方面的开发.秒杀系统的前端交互流程设计如下图6-3所 ...
- JAVA高并发秒杀API项目的学习笔记
一步一步的搭建JAVA WEB项目,采用Maven构建,基于MYBatis+Spring+Spring MVC+Bootstrap技术的秒杀项目学习的视频:http://www.imooc.com/l ...
- @Valid springMVC bean校验不起作用及如何统一处理校验
SpringMVC 使用JSR-303进行校验 @Valid 使用注解 一.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-vali ...
- SpringMvc中的校验框架@valid和@validation的概念及相关使用 和BindingResult bindingResult
1.比较 @Valid是使用hibernate validation的时候使用 @Validated 是只用spring Validator 校验机制使用\ 2.实现 其中,@valid,java的 ...
随机推荐
- smarty学习——高级知识
1.Objects 对象 smarty允许通过模板访问PHP对象.有两种方式来访问它们.一种是注册对象到模板,然后通过类似于用户自定义函数的形式来访问它. 另一种方法给模板分配对象,然后通过访问其它赋 ...
- 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- VisualSVN安装配置与使用
VisualSVN安装配置与使用 1. 所选服务器安装包:VisualSVN-Server-2.1.3.msi. 2. 客户端安装包:TortoiseSVN-1.6.2.16344-win32-s ...
- mac下hbase安装
出处:https://www.jianshu.com/p/510e1d599123 安装到的路径:/usr/local/Cellar/hbase/1.2.6 linux操作: linux命令 作用 . ...
- nginx 官方docker镜像使用教程
最近在看nignx,在本地虚拟机使用docker nginx镜像搭建了nginx+php环境 整理的教程如下: 拉取nginx镜像docker pull nginx 创建一个容器,并挂载本地目录doc ...
- ionic3之自定义tabs菜单图标
请参考以下链接 ionic3之自定义tabs菜单图标
- cc2530 AES加密
快速配置 Z-stack对Zigbee2006提供了全面的支持,功能之强大,性能稳定.安全性高,说到安全性是我们今天的主题.CC2430硬件支持128bit的AES加密算法,在协议栈中为了避开相同设备 ...
- 进程表/文件表/inode/vnode
一般我们讲,都说进程有文件描述符表,文件描述符表中的指针指向某个inode,这中间省略了file,dentry对象,对准确理解VFS结构无益,本文结合网络所查,并根据APUE8.3和LKD13.11章 ...
- 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明
摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFac ...
- jQuery控制网页字体大小和肤色
在一些网站上经常看到有控制网页肤色和字体大小的功能,接下来,我们将用两个例子来实现这两个功能. 网页字体大小 首先我们在网页中添加一些被控制大小的文字和字体控制的按钮. <!DOCTYPE> ...