作者:狂乱的贵公子

cnblogs.com/cjsblog/p/8946768.html

整编:Java技术栈微信公众号

1

背景介绍

开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码。

这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。

接下来,用Validation来改写这段。

2

Spring Boot文档中的Validation

在Spring Boot的官网中,关于Validation只是简单的提了一句,如下

其实,Spring ValidatorHibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator。在Java技术栈微信公众号后台回复关键字:boot,可以获取更多栈长整理的 Spring Boot 系列技术干货。

3

Hibernate Validator

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

4

Spring Validator

https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation

5

示例

5.1、引入spring-boot-starter-validation

5.2、定义一个对象

5.3、适用@Valid校验,并将校验结果放到BindingResult对象中

推荐阅读:参数验证 @Validated 和 @Valid 的区别。

注意:

  • 默认情况下,如果校验失败会抛javax.validation.ConstraintViolationException异常,可以用统一异常处理去对这些异常做处理

  • An Errors/BindingResult argument is expected to be declared immediately after the model attribute

推荐阅读:参数验证 @Validated 和 @Valid 的区别。

5.4、看效果

如果在校验的对象后面再加上Model对象的话,如果返回的是ModelAndView就可以将这个Model设置到其中,这样在页面就可以取到错误消息了

仅仅只是单字段校验的话未免也太不灵活了吧,如果字段之间有关联关系,那该如何校验呢?答案是自定义。

5.5、自定义校验规则

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints

这里,以优惠券创建为例来演示如何自定义校验规则

首先,优惠券表单如下(仅仅只是演示用):

这里除了自定义了两条校验规则之外,还用到了分组。

为什么要有分组这一说呢?因为,举个例子,添加的时候不需要校验id,而修改的时候id不能为空,有了分组以后,就可以添加的时候校验用组A,修改的时候校验用组B

下面重点看一下@CheckTimeInterval

第一步、定义一个注解叫CheckTimeInterval

第二步、定义Validator去校验它

顺便提一句,这里BeanWrapper去取对象的属性值,我们稍微看一下BeanWrapper是做什么的?

言归正传

第三步、验证

看,自定义的校验生效了。

6

补充

6.1、校验模式

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast

下面补充一点,关于校验模式。

默认会校验完所有属性,然后将错误信息一起返回,但很多时候不需要这样,一个校验失败了,其它就不必校验了。为此,需要这样设置?

 6.2、单个参数校验

如果是调整页面的时候参数校验失败的话,这时可以不做处理,让其调到错误页面。

如果是接口参数校验失败的话,可以在这里进行统一处理,并返回。例如:

 6.3、错误页面

以刚才优惠券详情为例

http://localhost:8080/coupon/detail.html

400

http://localhost:8080/coupon/detail.html?id=

400

http://localhost:8080/coupon/detail.html?id=abc

400

http://localhost:8080/coupon/detail222.html?id=123

404

无权限

403

int a = 1 / 0;

500

 6.4、@Valid与@Validated

https://blog.csdn.net/qq_27680317/article/details/79970590

参考

  • http://rensanning.iteye.com/blog/2357373

  • https://blog.csdn.net/kenight/article/details/77774465

  • https://www.cnblogs.com/mr-yang-localhost/p/7812038.html

  • https://www.phpsong.com/3567.html

  • https://www.cnblogs.com/mr-yang-localhost/p/7812038.html

在Java技术栈微信公众号后台回复关键字:boot,可以获取更多栈长整理的 Spring Boot 系列技术干货。

最近干货分享

Java程序员必学:Spring全家桶学习指南!

Java 11 比 Java 8 究竟快多少?

月薪 2W+ 程序员,过年相亲,三次遭拒!

把 14 亿人拉到一个微信群,如何实现?

为什么公司宁愿 25K 重新招人,也不给你加到 20K?

点击「」加入Java技术栈小密圈…

1000+ 程序员已加入讨论!

java fileinputstream 安全管理器校验失败_Spring Boot 如何做参数校验?相关推荐

  1. 面试官 | 如何在 Spring Boot 中进行参数校验?

    作者 | 狂乱的贵公子 来源 | cnblogs.com/cjsblog/p/8946768.html 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码 这样写并没有什么错,还 ...

  2. Spring Boot实现各种参数校验,值得一看

    前言 本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理,死磕到底! 项目源码:一键获取源码地址 简单使用 Java API规范 (JSR303) 定义了Bean校验的标 ...

  3. 手把手教你利用Spring Boot实现各种参数校验

    前言 本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理,死磕到底!一键获取源码地址 简单使用 Java API规范 (JSR303) 定义了Bean校验的标准valid ...

  4. java的安全管理器_Java安全管理器——SecurityManager

    总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性:二是Java语言开发的应用程序的安全性.由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我 ...

  5. java 的安全管理器

    安全管理器 SecurityManager 基本原理和使用方法 SecurityManager Policy 文件 AccessController java安全管理器概念 java安全管理器允许一个 ...

  6. 般若堂--Spring Boot系列之参数校验

    本章小宋带大家详细了解一下在Spring boot项目中,是怎么去验证参数的.话不多说直接进入学习时间. 目录 参数校验注解 相关依赖 实体类 一些常用的字段验证的注解 JSR提供的校验注解: Hib ...

  7. java 实现批量注册---实现类层(含入参参数校验)

    /*** 批量注册** @param file* @return*/@Transactional@Overridepublic Result batchRegistOrganUserByTemplat ...

  8. mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...

    一.依赖 org.springframework.bootspring-boot-starter-validation2.3.3.RELEASE 二.实体类 @TableField("use ...

  9. aop+注解 实现对实体类的字段校验_SpringBoot实现通用的接口参数校验

    来自:掘金,作者:cipher 链接:https://juejin.im/post/5af3c25b5188253064651c76 原文链接:http://www.ciphermagic.cn/sp ...

最新文章

  1. 筛指定区间的素数[区间偏移二次筛法]
  2. Windows 8部署系列PART2:部署先决条件准备
  3. hadoop + spark+ hive 集群搭建(apache版本)
  4. java socket datagramsocket_用DatagramSocket写的个渣渣聊天后台,求拍砖
  5. DRBD 高可用配置详解(转)
  6. 三种监控平台配置及其整合(cacti nagios ganglia)
  7. JavaScript的检测及其数据类型
  8. 15个著名的设计心理学原理以及在设计中的应用
  9. SCVMM Self-Service Portal 2.0 SP1安装体验
  10. SpringCloud工作笔记072---同一浏览器上不同标签页_tab页或者同一浏览器新开一个浏览器窗口也能实现单点登录_单点登录_localStorage_sessionStorage
  11. Python 建模步骤
  12. mac 安装php7.4
  13. 定制ATP-EMTP电力系统仿真模型程序修改代做
  14. html foreach 行 间隔,颜色,javascript简单实现表格行间隔显示颜色并高亮显示
  15. kali 破解无线密码
  16. PHP获取汉字的拼音(支持首字母和全拼)
  17. TOOLTIPS 的相关用法
  18. 三维建模初学者学习方法及资料
  19. Flink 如何分流数据
  20. tensorflow与pytorch 一起安装

热门文章

  1. attr 和 prop 区别
  2. WebPack常用功能介绍
  3. 文章目录:使用VisualStudio 2010从分析到实施系列【共5+3篇】
  4. Java Interview Questions
  5. html如何做卷展菜单,“选择”卷展栏(可编辑网格)
  6. iOS-使用代码约束布局(Masonry)
  7. Springmvc+mybaits 分页处理+ajax翻页
  8. Codeforces Round #342 (Div. 2)
  9. poj_3628 动态规划
  10. mongodb batchInsert