作者:双斜杠少年

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校验相关推荐

  1. java spring 校验框架_Springboot 使用校验框架validation校验

    b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的. Spring3支持JSR-303验证框架,JSR-303 ...

  2. bean validation校验方法参数_Springboot 使用校验框架validation校验

    作者:双斜杠少年 blog.csdn.net/u012373815/article/details/72049796 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上 ...

  3. Springboot Bean Validation校验框架

    我们的校验框架通常用于DTO层,用户从前端通过Json串传入值,后端对传入的Json封装到DTO层中,我们对DTO层的元素进行校验,比如邮箱,手机号等等. 首先需要引入bean校验需要的jar包: & ...

  4. 粉丝说SpringBoot集成validation校验参数有坑,我试了试

    公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑. 原留言如下: 有坑,你试试^A-\\d{12}-\\d{4}$,这条正则经过validate这个方 ...

  5. springboot中参数校验(validation)使用

    文章目录 介绍: validation引入 可用约束(constraint) 应用实战 实体类 接口参数型 约束生效 实体型 介绍: 在开发中,会经常需要进行参数的校验,比如接口层.业务层.持久层等, ...

  6. springboot 配置 Validator 校验框架国际化 支持快速返回

    1.国际化资源 使用IDEA创建资源组 2.编写配置 application.yml 增加国际化目录配置 增加国际化配置类 从请求头获取多语言关键字 /*** 国际化配置** @author Lion ...

  7. Spring Validation 校验

    一.概述 在 Web 应用中,客户端提交数据之前都会进行数据的校验,比如用户注册时填写的邮箱地址是否符合规范.用户名长度的限制等等,不过这并不意味着服务端的代码可以免去数据验证的工作,用户也可能使用 ...

  8. 高效使用hibernate-validator校验框架

    一.前言 高效.合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑.接下来会介绍一下常用一些使用方式. 二.常用注解说明 限制 说明 @Null 限 ...

  9. bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 顺便再给大家推荐一套Spring ...

最新文章

  1. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
  2. 定义AI,麦卡锡、图灵、乔丹...我们听谁的?
  3. 可迭代对象、迭代器与生成器
  4. Python 绘图库 Matplotlib
  5. 2019牛客暑期多校训练营(第十场)
  6. 用函数求C15的值C语言,南开19春学期(1503、1509、1603、1609、1703)《C语言程序设计》在线作业-1辅导资料.docx...
  7. 关于ByteBuffer使用解释
  8. 10 | 递归:如何用三行代码找到“最终推荐人”?
  9. Exchange Online基于网络位置限制使用
  10. firfox 和 chrome 移动端Web开发页面调试
  11. 2019年中国十大富豪排名出炉!马化腾力压马云位列榜首
  12. 过拟合解决方法python_机器学习之过拟合的风险
  13. 周末ROS学习沙龙第二期——自定义消息通信、视频传输、人脸检测、小车动手编程
  14. OpenResty概述
  15. RTOS原理与实现08:存储块实现
  16. Atitit 项目源码管理 attilax著 1. 源码结构sdk目录结构 1 1.1. 源码分类,配置文件,主程序文件,sql文件 1 2. 源码管理,提交,更新,与同步 1 2.1. 源码同步
  17. 三菱伺服自动调谐_MR-J3-700B4-RJ004 更为先进的实时自动调谐通过设定响应值, 三菱MR-J3-700B4-RJ004 - 广州凌控...
  18. 英语聊天时“好的”、“我知道了”、“收到”、“嗯嗯”之类的怎么说?
  19. mac 恢复未能与服务_MacBook Pro无法与恢复服务器取得联系?
  20. 目前流行的装修风格_2020最新装修风格,目前流行的装修风格,值得收藏!

热门文章

  1. ZAO回应被约谈...
  2. 投资快手近尾声 腾讯持股超30%将置入资产或资源
  3. 孙宇晨凌晨发致歉信:为过度营销、热衷炒作的行为深感愧疚
  4. 优衣库试衣间又出事了!惊现针孔摄像头 回应:正全力配合警方调查
  5. 中国5G标准专利数量遥遥领先:不卖产品也获利
  6. 阿里巴巴发布招聘微博:新财年新增超过1800岗位需求
  7. 搭一个简单的接口测试框架
  8. Python 提交表单数的一点简单介绍How to submit a web form
  9. go https client
  10. 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?