@Validated注解校验
前后端交互中字段校验必不可少,当对象中有大量变量该如何校验?使用@validated注解是个不错的选择。
@Valid是使用hibernate validation的时候使用;而@Validated 是只用spring Validator 校验机制使用。
下面介绍@Validated注解校验的使用
一、添加校验信息
在需要校验的对象上添加校验类别及错误提示信息即可
public class ChecktemplateSupport { private String id;@NotBlank(message = "检查模板名称不能为空")private String strname;@NotNull(message = "检查模板类型不能为空")private Integer checktype;private Integer nenabled;@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")private Date dtcreatetime;private Integer strcreateauthor;@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")private Date dtupdatetime;private Integer strupdateauthor;private Integer tempversion;private Integer nstatus;private Integer userid;@Validprivate List<ChecktemplateProjectSupport> project;
}
常见的校验类别注解见下表:
限制 | 说明 |
---|---|
@Null | 限制只能为null |
@NotNull | 限制必须不为null |
@AssertFalse | 限制必须为false |
@AssertTrue | 限制必须为true |
@DecimalMax(value) | 限制必须为一个不大于指定值的数字 |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 |
@Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
@Future | 限制必须是一个将来的日期 |
@Max(value) | 限制必须为一个不大于指定值的数字 |
@Min(value) | 限制必须为一个不小于指定值的数字 |
@Past | 限制必须是一个过去的日期 |
@Pattern(value) | 限制必须符合指定的正则表达式 |
@Size(max,min) | 限制字符长度必须在min到max之间 |
@Past | 验证注解的元素值(日期类型)比当前时间早 |
@NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
二、接口中引入校验、绑定BindingResult
public CommonResponse<Checktemplate> addCheckTemplate(@Validated @RequestBody ChecktemplateSupport checktemplateSupport, BindingResult bindingResult,HttpSession httpSession) {......
}
三、处理校验结果
public static String handleBindException(BindingResult ex){// ex.getFieldError():随机返回一个对象属性的异常信息。如果要一次性返回所有对象属性异常信息,则调用ex.getAllErrors()List<ObjectError> errors = ex.getAllErrors(); if(errors != null && errors.size() > 0){StringBuilder sb = new StringBuilder();for (ObjectError err : errors) { sb.append(err.getDefaultMessage()).append("; "); } return sb.toString();}return null;}
四、问题及解决
(1)对象中的对象需要校验,添加@Validated,仍旧无法校验
目前不知道原因,只知道解决方案,有知道的大神求回复。解决方案,将@Validated替换成@Valid就可以了
(2)Integer类型定义成NotEmpty报错
原因:@NotEmpty一般适用于集合类、String、Array的校验;@NotNull可适用于任意对象。
Integer使用@NotNull校验就行
(3)String类型字段,null能捕获校验,但“”空字符串未捕获校验
被自己蠢哭。原因:使用了@NotEmpty只校验了null,使用@NotBlank即可
参考文献:https://blog.csdn.net/u012373815/article/details/72049796
@Validated注解校验相关推荐
- @Valid和@Validated注解校验List<Object>
@Valid和@Validated注解校验List< Object> spring 4整合hibernate-validator6 1.导包 <dependency><g ...
- Springboot @Validated参数校验
简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现.hibernate validation是对这个规范的实现,并增加了校验注解如@Em ...
- java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例
前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...
- @Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated
技术栈: spring boot 2.3.3.RELEASE hibernate-validator 文末附项目源代码 目录 简述 项目依赖 全局异常处理类 基础参数校验 实体类 控制类 测试 嵌套参 ...
- springboot validated注解数据校验 异常处理
springboot validated 数据校验 validated 数据校验 简单的写一下这个用法啊,清晰的本篇文章就记录这个注解的一个用法. validated 数据校验 我们一般的数据校验是怎 ...
- SpringBoot @Validated注解实现参数校验
1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...
- spring多参java注解_spring参数注解校验
在写一些controller协议的时候,有些时候从前端传过来的参数较多,好的办法是定义一个实体类来封装请求参数,但是用实体类封装参数后,无法对参数值进行校验,可以使用spring的@Validated ...
- spring注解校验
spring注解校验 在使用springboot 进行快速开发的时候,参数传递的地方都少不了参数校验.在web开发中,前后端都要进行参数校验,前端的参数校验是为了用户体验,后端的参数校验是为了安全.使 ...
- Spring中@NotEmpty,@NotBlank,@NotNull,@Valid,@Validated注解简介及简单使用
前言 在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作 Maven依赖的引入: springboot 2.3.0 以后 ...
最新文章
- 怎样写出简洁的css代码??★★★★
- python图片保存重命名_Python实现重命名一个文件夹下的图片
- dev中循环展示图片的样式怎么写_图中的这种样式怎么用HTML写?
- “618”台前幕后的那些事
- php oauth 扩展,PHP扩展之Web服务(一)——OAuth
- VB6.0报告命名空间找不到的原因
- python入门书?
- 串口服务器调试助手使用教程,串口服务器如何配置及串口调试6大技巧
- Windows系统和Mac OS系统的免费FTP客户端有哪些?
- 计算机笔记本电脑加固态硬盘,笔记本固态硬盘,教您怎么给笔记本加固态硬盘...
- linux内核的挂载,通过Linux内核使用RDT
- No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?进程虚拟地址4G指拥有4G的寻址能力,需要页表转换为实际物理地址,每个进程用到的内核是直接映射,地址的进程地址-3G的关系
- 真赔麻了!!一个BUG和一个回帖直接赔了20万!
- Netty导学之NIO,Channel、Buffer、Selector详解
- Office2011 for mac升级到Office2016 for mac后Outlook邮件索引丢失问题解决
- 新交互英语外挂全自己主动版
- 植树节活动策划主题班会PPT
- 易语言删除数组里的指定成员的三种方法
- LAMP架构介绍MySQL、MariaDB介绍 MySQL安装
热门文章
- resultMap使用方法
- Java实现微信抢红包
- 调音师在演奏中的重要性
- C++-Web框架:Drogon、Proxygen、Oat++、Crow、C++ REST SDK、Pistache、Silicon、Civetweb、Wt、cinatra
- c语言输出300 800之间最大的素数,辅助谁一级伤害最高?东皇:300,盾山:800,最强混子输出超1000...
- Ubuntu更新源列表
- c语言------Swap函数
- App Store预览视频制作(App Previews)
- 硬盘拆解全过程详细图解(ZT)
- Go最新版下载 Go1.20版新特性