Java 注解方式校验请求参数
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 表达式时。
//初始化对象时
String myString = new @Valid String(); //对象类型转化时
myString = (@Valid String) str; //使用 implements 表达式时
class MyList<T> implements List<@Valid T> {
...
} //使用 throws 表达式时
public void validateValues() throws @Valid ValidationFailedException{
...
}
3. 嵌套检验
在被检验的字段上添加 @Valid 注解就可以实现嵌套检验
当对象 Man 的字段 houses 包含 House 对象类型时,在检验 houses 字段时可以检验 House 对象的属性字段时,就称为嵌套检验。
示例如下:
在检验 Man 对象的 houses 字段时,在houses 字段上添加 @Valid 注解后,就可以检验 list 中的 House 的属性是否符合要求;
否则只会检验 houses 的集合大小是否大于1,不会校验集合中的 House 对象,比如 House 对象的 name 长度是否符合要求。
class Man{
@Valid
@Size(min = 1)
private List<House> houses;
}
class House{
@Length(min = 1,max = 10)
private String name;
}
Java 注解方式校验请求参数的更多相关文章
- Java Spring Controller 获取请求参数的几种方法
技术交流群:233513714 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...
- hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
spring maven项目,使用hibernate validator 注解形式校验客户端的请求参数. hibernate-validator版本:5.0.2.Final validation-ap ...
- SpringMVC(二):RequestMapping修饰类、指定请求方式、请求参数或请求头、支持Ant路径
@RequestMapping用来映射请求:RequestMapping可以修饰方法外,还可以修饰类 1)SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求: 2 ...
- 限制action所接受的请求方式或请求参数
原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...
- SpringMVC的controller方法中注解方式传List参数使用@RequestBody
在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...
- spring的Java注解方式
以往我们在使用spring的时候都是用一堆<>这个玩意(尖括号)的xml文件来配置spring,在xml里都是"xxx"来配置需要的内容信息,在"" ...
- 注解@RequestParam——取请求参数
一.创建index.jsp 创建一个用来发送请求的测试jsp <a href="springMVC/testRequestParam?username=lzj&age=20&q ...
- Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)
1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...
- java工具类-接受请求参数,并利用反射调用方法
public String a(HttpServletRequest request,HttpServletResponse response) throws JSONException, IOExc ...
随机推荐
- springboot-oracle工程win下正常,centos下不能访问数据库
工程在win下正常运行,部署到centos下出现下述异常: ### Error querying database. Cause: org.springframework.jdbc.CannotGet ...
- LeetCode:620.有趣的电影
题目链接:https://leetcode-cn.com/problems/not-boring-movies/ 题目 某城市开了一家新的电影院,吸引了很多人过来看电影.该电影院特别注意用户体验,专门 ...
- Java 单个集合去重与两个集合去重
一.单个集合去重 描述: 去掉一个集合里重复的元素:将list集合转成hashSet集合,hashSet有自动去重的功能,再利用去重后的hashSet集合初始化一个新的list集合,此时这个list就 ...
- Editplus code
网上一大堆,垃圾也是一大堆,保留一个真正的,提高效率 原文链接:https://blog.csdn.net/anhldd/article/details/85088715 Vovan 3AG46-JJ ...
- Python字符串、组合数据类型练习
一.Python字符串练习 1.http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html 取得校园新闻的编号. (这个方法就很多了,一般方 ...
- 不错的abap技术网站
http://www.saptechnical.com/index.htm https://sapcodes.com/
- shell脚本视频学习1
一.知识点:变量,参数传递 练习1:使用shell脚本,输出当前所在的目录 练习2:计算/etc目录下有多少个文件,用shell脚本实现 ls -l--->数一下, ls -l|wc -l ( ...
- Django单元测试 相关知识
前言 本文,旨在说明python Django如何编写单元测试,从“背景”,“测试要求”,“代码编写”,“如何运行”,“检验测试覆盖度” 这几个方面来说明附上django的官方文档单元测试章节=> ...
- IPC之mqueue.c源码解读
队列的意思应该大家都清楚,不过还有有一些细节的地方不知道,下面是一个队列的源码,因该说这是队列的一部分,不是全部.而且是linux中队列,其他各种OS中队列大同小异. /* * POSIX messa ...
- GridView 二维排布
与ListView一维排布相对 public class MainActivity extends Activity implements AdapterView.OnItemClickListene ...