1. 参数校验常用注解

 
       注解 验证的数据类型 备注                            
 Null   任意类型  参数值必须是 Null
 NotNull   任意类型  参数值必须不是 Null
 NotBlank   只能作用于字符串

字符串不能为 null,而且字符串长度必须大于0,至少包含一个非空字符串

 NotEmpty

CharSequence

Collection

Map

Array

字符串:字符串长度必须大于0,空字符串(“ ”)可以通过校验;

Collection:集合大小必须大于0;

Map:map的大小必须大于0;

Array:数组长度必须大于0;

 Size

CharSequence

Collection

Map

Array

 同 NotEmpty
 Range

数字类型

字符串类型

 数值或者字符串的值必须在 min 和 max 指定的范围内
 Length  字符串类型  字符串的长度在min 和  max 之间
 Pattern  字符串类型   验证字符串是否符合正则表达式
 Min  整型类型   参数值必须大于等于 最小值
 Max  整型类型   参数值必须小于等于 最大值
 DecimalMin  整型类型    参数值必须大于等于 最小值 
 DecimalMax  整型类型    参数值必须小于等于 最大值 
 AssertTrue  布尔类型   参数值必须为 true
 AssertFalse  布尔类型    参数值必须为 false 
 Past  时间类型   参数值必须小于 当前时间
 Future  时间类型   参数值必须大于 当前时间

2.  @Validated 和 @Valid

2.1 相同点

  在检验参数符合规范的功能上基本一致;

2.2 不同点

2.2.1 提供者

  validated 是Spring Validation验证框架对参数的验证机制;

  valid是 javax 提供的参数验证机制

2.2.2 作用域

  validated :类,方法,参数

  valid:方法, 字段, 构造方法, 参数, TYPE_USE;

  TYPE_USE:

   在 Java 8 之前的版本中,只能允许在声明式前使用 Annotation。而在 Java 8 版本中,Annotation 可以被用在任何使用 Type 的地方,例如:初始化对象时 (new),对象类型转化时,使用 implements 表达式时,或者使用 throws 表达式时。

  1. //初始化对象时
  2. String myString = new @Valid String();
  3.  
  4. //对象类型转化时
  5. myString = (@Valid String) str;
  6.  
  7. //使用 implements 表达式时
  8. class MyList<T> implements List<@Valid T> {
  9. ...
  10. }
  11.  
  12. //使用 throws 表达式时
  13. public void validateValues() throws @Valid ValidationFailedException{
  14. ...
  15. }

3. 嵌套检验

  在被检验的字段上添加 @Valid 注解就可以实现嵌套检验

  当对象 Man 的字段 houses 包含 House 对象类型时,在检验 houses 字段时可以检验 House 对象的属性字段时,就称为嵌套检验。

  示例如下:

  在检验 Man 对象的 houses 字段时,在houses 字段上添加 @Valid 注解后,就可以检验 list 中的 House 的属性是否符合要求;

  否则只会检验 houses 的集合大小是否大于1,不会校验集合中的 House 对象,比如 House 对象的 name 长度是否符合要求。

  1. class Man{
  2.  
  3. @Valid
  4. @Size(min = 1)
  5. private List<House> houses;
  6. }
  7.  
  8. class House{
  9.  
  10. @Length(min = 1,max = 10)
  11. private String name;
  12. }

Java 注解方式校验请求参数的更多相关文章

  1. Java Spring Controller 获取请求参数的几种方法

    技术交流群:233513714  1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...

  2. hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException

    spring maven项目,使用hibernate validator 注解形式校验客户端的请求参数. hibernate-validator版本:5.0.2.Final validation-ap ...

  3. SpringMVC(二):RequestMapping修饰类、指定请求方式、请求参数或请求头、支持Ant路径

    @RequestMapping用来映射请求:RequestMapping可以修饰方法外,还可以修饰类 1)SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求: 2 ...

  4. 限制action所接受的请求方式或请求参数

    原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...

  5. SpringMVC的controller方法中注解方式传List参数使用@RequestBody

    在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...

  6. spring的Java注解方式

    以往我们在使用spring的时候都是用一堆<>这个玩意(尖括号)的xml文件来配置spring,在xml里都是"xxx"来配置需要的内容信息,在"" ...

  7. 注解@RequestParam——取请求参数

    一.创建index.jsp 创建一个用来发送请求的测试jsp <a href="springMVC/testRequestParam?username=lzj&age=20&q ...

  8. Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)

    1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...

  9. java工具类-接受请求参数,并利用反射调用方法

    public String a(HttpServletRequest request,HttpServletResponse response) throws JSONException, IOExc ...

随机推荐

  1. Facebook 一个热搜帖,美国一个老人癌症不治最后的心愿是跟儿子喝啤酒。

    今天早上起床看到这个Facebook上的热搜帖.太感动了.这个老人癌症不治后最后心愿是跟他的儿子们一起喝一次啤酒.这个帖子被他孙子贴上网以后牵动了千万人的心.

  2. Java并发编程——线程池

    本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...

  3. JS和JS是IE上JavaScript或JScript的缩写。

    JS和JS是IE上JavaScript或JScript的缩写.javascript是所有浏览器的开放式标准脚本语言JScript是微软自己的开放式脚本语言标准,只有微软的IE浏览器遵循.JScript ...

  4. VS2012隐藏输出窗口的快捷键是什么。

    纯属用键盘无法直接关闭这个窗口.有一个变通的方法是,先切换到这个输出窗口(标题呈现高亮的蓝色),使用Alt+W打开窗口菜单,选H隐藏就可以关闭.使用Ctrl+Alt+o可再次打开.按ESC就可以了.我 ...

  5. 1、Bash Shell

    一.什么是Bash shell BashShell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕. 当我们 ...

  6. BLE 5协议栈-主机控制接口(HCI)

    文章参考自:http://www.sunyouqun.com/2017/04/page/3/ .https://www.cnblogs.com/yuqilihualuo/p/9790164.html ...

  7. jdk提供的线程协调API suspend/resume wait/notify park/unpark

    线程通信(如 线程执行先后顺序,获取某个线程执行的结果等)有多种方式: 文件共享 线程1 --写入--> 文件 < --读取-- 线程2 网络共享 变量共享 线程1 --写入--> ...

  8. 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)

    完全平方数 HYSBZ - 2440 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些 数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而 这丝毫不影响他对其他 ...

  9. JavaScript柯里化(currying)

    参考: https://www.jianshu.com/p/33392cb4b055 https://ruby-china.org/topics/38385 https://stackoverflow ...

  10. [uboot] (番外篇)uboot 驱动模型(转)重要

    [uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)[project X] tiny210(s5pv210)从存储设备加载代码到D ...