前后端交互中字段校验必不可少,当对象中有大量变量该如何校验?使用@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 验证注解的元素值是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注解校验相关推荐

  1. @Valid和@Validated注解校验List<Object>

    @Valid和@Validated注解校验List< Object> spring 4整合hibernate-validator6 1.导包 <dependency><g ...

  2. Springboot @Validated参数校验

    简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现.hibernate validation是对这个规范的实现,并增加了校验注解如@Em ...

  3. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  4. @Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated

    技术栈: spring boot 2.3.3.RELEASE hibernate-validator 文末附项目源代码 目录 简述 项目依赖 全局异常处理类 基础参数校验 实体类 控制类 测试 嵌套参 ...

  5. springboot validated注解数据校验 异常处理

    springboot validated 数据校验 validated 数据校验 简单的写一下这个用法啊,清晰的本篇文章就记录这个注解的一个用法. validated 数据校验 我们一般的数据校验是怎 ...

  6. SpringBoot @Validated注解实现参数校验

    1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...

  7. spring多参java注解_spring参数注解校验

    在写一些controller协议的时候,有些时候从前端传过来的参数较多,好的办法是定义一个实体类来封装请求参数,但是用实体类封装参数后,无法对参数值进行校验,可以使用spring的@Validated ...

  8. spring注解校验

    spring注解校验 在使用springboot 进行快速开发的时候,参数传递的地方都少不了参数校验.在web开发中,前后端都要进行参数校验,前端的参数校验是为了用户体验,后端的参数校验是为了安全.使 ...

  9. Spring中@NotEmpty,@NotBlank,@NotNull,@Valid,@Validated注解简介及简单使用

    前言 在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作 Maven依赖的引入: springboot 2.3.0 以后 ...

最新文章

  1. 怎样写出简洁的css代码??★★★★
  2. python图片保存重命名_Python实现重命名一个文件夹下的图片
  3. dev中循环展示图片的样式怎么写_图中的这种样式怎么用HTML写?
  4. “618”台前幕后的那些事
  5. php oauth 扩展,PHP扩展之Web服务(一)——OAuth
  6. VB6.0报告命名空间找不到的原因
  7. python入门书?
  8. 串口服务器调试助手使用教程,串口服务器如何配置及串口调试6大技巧
  9. Windows系统和Mac OS系统的免费FTP客户端有哪些?
  10. 计算机笔记本电脑加固态硬盘,笔记本固态硬盘,教您怎么给笔记本加固态硬盘...
  11. linux内核的挂载,通过Linux内核使用RDT
  12. No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
  13. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?进程虚拟地址4G指拥有4G的寻址能力,需要页表转换为实际物理地址,每个进程用到的内核是直接映射,地址的进程地址-3G的关系
  14. 真赔麻了!!一个BUG和一个回帖直接赔了20万!
  15. Netty导学之NIO,Channel、Buffer、Selector详解
  16. Office2011 for mac升级到Office2016 for mac后Outlook邮件索引丢失问题解决
  17. 新交互英语外挂全自己主动版
  18. 植树节活动策划主题班会PPT
  19. 易语言删除数组里的指定成员的三种方法
  20. LAMP架构介绍MySQL、MariaDB介绍 MySQL安装

热门文章

  1. resultMap使用方法
  2. Java实现微信抢红包
  3. 调音师在演奏中的重要性
  4. C++-Web框架:Drogon、Proxygen、Oat++、Crow、C++ REST SDK、Pistache、Silicon、Civetweb、Wt、cinatra
  5. c语言输出300 800之间最大的素数,辅助谁一级伤害最高?东皇:300,盾山:800,最强混子输出超1000...
  6. Ubuntu更新源列表
  7. c语言------Swap函数
  8. App Store预览视频制作(App Previews)
  9. 硬盘拆解全过程详细图解(ZT)
  10. Go最新版下载 Go1.20版新特性