Springboot 使用校验框架validation校验
作者:双斜杠少年
blog.csdn.net/u012373815/article/details/72049796
b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的。
Spring3支持JSR-303验证框架,JSR-303 是Java EE 6 中的一项子规范,叫做BeanValidation,官方参考实现是hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对Java Bean 中的字段的值进行验证。
validation与 springboot 结合
依赖
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.0.16.Final</version></dependency>
1. bean 中添加标签
部分代码:
标签需要加在属性上,@NotBlank 标签含义文章末尾有解释
public class User {private Integer id;@NotBlank(message = "{user.name.notBlank}")private String name;private String username;
2. Controller中开启验证
在Controller 中 请求参数上添加@Validated 标签开启验证
@RequestMapping(method = RequestMethod.POST)public User create(@RequestBody @Validated User user) {return userService.create(user);}@RequestMapping(method = RequestMethod.GET)public User getUserById(@NotNull(message = "id不能为空") int userId) {return userService.getUserById(userId);}
3. resource 下新建错误信息配置文件
当然 message 信息也可以配置在标签后面例如
public class User {private Integer id;@NotBlank(message = "名字不能为空")private String name;private String username;
也可以在resource 目录下新建提示信息配置文件“ValidationMessages.properties“ 这样可以全局统一管理错误消息
注意:名字必须为“ValidationMessages.properties“ 因为SpringBoot自动读取classpath中的ValidationMessages.properties里的错误信息
ValidationMessages.properties 文件的编码为ASCII。数据类型为 key value 。
key“user.name.notBlank“为第一步 bean的标签 大括号里面对应message的值
value 为提示信息 ,但是是ASCII 。(内容为“名字不能为空“)
4. 自定义异常处理器,捕获错误信息
当验证不通过时会抛异常出来,异常的message 就是 ValidationMessages.properties 中配置的提示信息。
此处定义异常处理器。捕获异常信息(因为验证不通过的项可能是多个所以统一捕获处理),并抛给前端。(此处是前后端分离开发)
@ExceptionHandler(MethodArgumentNotValidException.class)public void MethodArgumentNotValidException(Exception ex, HttpServletRequest request, HttpServletResponse response) {logger.error( ":" + CommonUtil.getHttpClientInfo(request), ex);MethodArgumentNotValidException c = (MethodArgumentNotValidException) ex;List<ObjectError> errors =c.getBindingResult().getAllErrors();StringBuffer errorMsg=new StringBuffer();errors.stream().forEach(x -> errorMsg.append(x.getDefaultMessage()).append(";"));pouplateExceptionResponse(response, HttpStatus.INTERNAL_SERVER_ERROR, errorMsg.toString());}private void pouplateExceptionResponse(HttpServletResponse response, HttpStatus errorCode, String errorMessage) {try {response.sendError(errorCode.value(), errorMessage);} catch (IOException e) {logger.error("failed to populate response error", e);}}
5. 附上部分标签含义
示例
@Pattern(regexp="^[a-zA-Z0-9]+$",message="{account.username.space}")@Size(min=3,max=20,message="{account.username.size}")
如果上述的参数校验不满足要求可以 考虑自定义注解
自定义注解校验
步骤:
1、定义注解, 2、实现校验逻辑
用法
public class MySaveArgs {@NotEmpty@MustBeMyCodeprivate String code;
定义注解
@Constraint(validatedBy = {MyCodeConstraintValidator.class}
)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface MustBeMyCode {String message() default "编码校验不通过";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}
实现ConstraintValidator 接口,编写自己的校验逻辑,
public class MyCodeConstraintValidator implements ConstraintValidator<MustBeMyCode, String> {@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {//此处编写自己的校验逻辑,并返回return value != null;}
}
注意:ConstraintValidator<MustBeMyCode, String> 此处应填写你自己的校验注解名 和 需校验参数类型
另
琐碎时间想看一些技术文章,可以去公众号菜单栏翻一翻我分类好的内容,应该对部分童鞋有帮助。同时看的过程中发现问题欢迎留言指出,不胜感谢~。另外,有想多了解哪些方面内容的可以留言(什么时候,哪篇文章下留言都行),附菜单栏截图(PS:很多人不知道公众号菜单栏是什么)
END
我知道你 “在看”
Springboot 使用校验框架validation校验相关推荐
- java spring 校验框架_Springboot 使用校验框架validation校验
b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的. Spring3支持JSR-303验证框架,JSR-303 ...
- bean validation校验方法参数_Springboot 使用校验框架validation校验
作者:双斜杠少年 blog.csdn.net/u012373815/article/details/72049796 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上 ...
- Springboot Bean Validation校验框架
我们的校验框架通常用于DTO层,用户从前端通过Json串传入值,后端对传入的Json封装到DTO层中,我们对DTO层的元素进行校验,比如邮箱,手机号等等. 首先需要引入bean校验需要的jar包: & ...
- 粉丝说SpringBoot集成validation校验参数有坑,我试了试
公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑. 原留言如下: 有坑,你试试^A-\\d{12}-\\d{4}$,这条正则经过validate这个方 ...
- springboot中参数校验(validation)使用
文章目录 介绍: validation引入 可用约束(constraint) 应用实战 实体类 接口参数型 约束生效 实体型 介绍: 在开发中,会经常需要进行参数的校验,比如接口层.业务层.持久层等, ...
- springboot 配置 Validator 校验框架国际化 支持快速返回
1.国际化资源 使用IDEA创建资源组 2.编写配置 application.yml 增加国际化目录配置 增加国际化配置类 从请求头获取多语言关键字 /*** 国际化配置** @author Lion ...
- Spring Validation 校验
一.概述 在 Web 应用中,客户端提交数据之前都会进行数据的校验,比如用户注册时填写的邮箱地址是否符合规范.用户名长度的限制等等,不过这并不意味着服务端的代码可以免去数据验证的工作,用户也可能使用 ...
- 高效使用hibernate-validator校验框架
一.前言 高效.合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑.接下来会介绍一下常用一些使用方式. 二.常用注解说明 限制 说明 @Null 限 ...
- bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!
本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 顺便再给大家推荐一套Spring ...
最新文章
- 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
- 定义AI,麦卡锡、图灵、乔丹...我们听谁的?
- 可迭代对象、迭代器与生成器
- Python 绘图库 Matplotlib
- 2019牛客暑期多校训练营(第十场)
- 用函数求C15的值C语言,南开19春学期(1503、1509、1603、1609、1703)《C语言程序设计》在线作业-1辅导资料.docx...
- 关于ByteBuffer使用解释
- 10 | 递归:如何用三行代码找到“最终推荐人”?
- Exchange Online基于网络位置限制使用
- firfox 和 chrome 移动端Web开发页面调试
- 2019年中国十大富豪排名出炉!马化腾力压马云位列榜首
- 过拟合解决方法python_机器学习之过拟合的风险
- 周末ROS学习沙龙第二期——自定义消息通信、视频传输、人脸检测、小车动手编程
- OpenResty概述
- RTOS原理与实现08:存储块实现
- Atitit 项目源码管理 attilax著 1. 源码结构sdk目录结构	1 1.1. 源码分类,配置文件,主程序文件,sql文件	1 2. 源码管理,提交,更新,与同步	1 2.1. 源码同步
- 三菱伺服自动调谐_MR-J3-700B4-RJ004 更为先进的实时自动调谐通过设定响应值, 三菱MR-J3-700B4-RJ004 - 广州凌控...
- 英语聊天时“好的”、“我知道了”、“收到”、“嗯嗯”之类的怎么说?
- mac 恢复未能与服务_MacBook Pro无法与恢复服务器取得联系?
- 目前流行的装修风格_2020最新装修风格,目前流行的装修风格,值得收藏!