【Java】使用@Valid+BindingResult进行controller参数校验
@Valid
@Valid注解用于校验,所属的包: javax.validation.Valid.
你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。
## 空检查 @NotEmpty:用在集合类上面;不能为null,而且长度必须大于0 @NotBlank: 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 @NotNull:用在基本类型上;不能为null,但可以为empty。 ## 长度检查 @Size(min=,max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 不要错用了异常类型,比如在int上不可用@size @Length(min=, max=) : 只适用于String 类型 ## Booelan检查 @AssertTrue: 验证 Boolean 对象是否为 true @AssertFalse: 验证 Boolean 对象是否为 false ## 日期检查 @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指定小数精度。
BindingResult
Spring验证的错误返回
@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱
public class PublicUserForm implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 手机号
*/
@NotBlank(message = "{required}")
@Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
private String telephone;
/**
* 密码
*/
private String password;
2.controller层
public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception {
//在这里,我们判断参数是否通过校验
if (bindingResult.hasErrors()) {
Map<String,String> errorMsg = new HashMap<>();
for (FieldError item:bindingResult.getFieldErrors()) {
errorMsg.put(item.getField(),item.getDefaultMessage());
}
//自定义的返回,并将错误信息返回
return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
}
PublicUser publicUser = publicUserService.regist(publicUserForm);
return new ResponseResult(true,200,"访问成功!",null);
}
【Java】使用@Valid+BindingResult进行controller参数校验的更多相关文章
- springboot @valid与@validated的参数校验使用总结
好久没在这平台写博客了,最近整理了这东西,先给出总结 // @Valid只能用在controller,@Validated可以用在其他被spring管理的类上 // @Valid可以加在成员变量上(本 ...
- spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决
参考文档: https://www.oschina.net/question/115867_2282711 谢谢原作者
- Java Bean Validation(参数校验) 最佳实践
转载来自:http://www.cnblogs.com 参数校验是我们程序开发中必不可少的过程.用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的 ...
- SpringBoot 如何进行参数校验,老鸟们都这么玩的!
大家好,我是飘渺. 前几天写了一篇 SpringBoot如何统一后端返回格式?老鸟们都是这样玩的! 阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数 ...
- 接口参数校验之@Valid与BindingResult
接口方法往往需要对入参做一些校验,从而判断入参是否合格,而javax.validation包为我们提供了一些常用的参数校验注解,使用起来很方便. 下面这个示例是检验入参对象中的password是否为空 ...
- 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果
/** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...
- Java web服务端参数校验Javax.validation (springboot)
一.基本使用 Javax.validation是spring集成自带的一个参数校验接口.可通过添加注解来设置校验条件. 下面以springboot项目为例进行说明.创建web项目后,不需要再添加其他的 ...
- 【springboot】@Valid参数校验
转自: https://blog.csdn.net/cp026la/article/details/86495659 扯淡: 刚开始写代码的时候对参数的校验要么不做.要么写很多类似 if( xx == ...
- java自定义注解实现前后台参数校验
2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...
随机推荐
- Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.4 Predicates and Quantifiers
The statements that describe valid input are known as preconditions and the conditions that the outp ...
- 【Linux开发】jpeglib使用指南
您可以到www.ijg.org网站下载libjpeg的源码, IJG JPEG Library就是jpeg压缩库,是以源码的形式提供给软件开发人员的,当然在软件包里也有编译好的库文件,我们这里就只用到 ...
- 2019JAVA第一次课程总结
课程总结:到现在为止之,学习专业课程已有两周了,从刚开始的啥也不懂,现在慢慢入门了.最开始我们为JAVA开发了运行环境,然后使用类编写了最简单的输出,然后开始学习了数据类型,这可以在编程中帮我们解决一 ...
- [DS+Algo] 010 二叉树的遍历
二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node( ...
- (4.31)sql server中的xml数据操作
关键词:xml数据转为行列方式显示 常规案例: declare @data xml declare @h int set @data=' <bookstore> <row> & ...
- Python3 AES加解密(AES/ECB/PKCS5Padding)
class AesEncry(object): key = "wwwwwwwwwwwwwwww" # aes秘钥 def encrypt(self, data): data = j ...
- 嵌入式软件工程师C语言经典笔试2
1. 使用宏定义swap函数,不使用中间变量 #define swap(x,y) {(x) = (x) + (y);(y) = (x) - (y);(x) = (x) - (y)} 2. 实现字符串的 ...
- 图——图的Kruskal法最小生成树实现
1,最小生成树的特征: 1,选取的边是图中权值较小的边: 2,所有边连接后不构成回路: 2,prim 算法是以顶点为核心的,最下生成树最大的特征是边,但 prim 算法非要以顶点为核心来进行,有些复杂 ...
- HDU-4857 逃生(反向拓扑排序 + 逆向输出)
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- js函数调用的几种方法
js的函数调用会免费奉送两个而外的参数就是 this 和 arguments .arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度. 书上有说4中调用方式: 方 ...