Spring Boot 参数校验

1、背景介绍

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

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

接下来,用Validation来改写这段

2、Spring Boot文档中的Validation

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

其实,Spring ValidatorHibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator

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对象中

注意:

  • 默认情况下,如果校验失败会抛javax.validation.ConstraintViolationException异常,可以用统一异常处理去对这些异常做处理
  • An Errors/BindingResult argument is expected to be declared immediately after the model attribute

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

原文地址:https://www.cnblogs.com/mrchenzheng/p/12165757.html

时间: 2024-10-20 15:15:48

Spring Boot 参数校验的相关文章

spring boot 参数传递(spring boot 参数传数 arg0 每一个参数 arg0#{arg0},arg1 #{arg1})

spring boot 参数传数 arg0 每一个参数 arg0#{arg0},arg1  #{arg1} @Select("select * from sys_user where name=#{arg0} and pass=#{arg1}") public List<Map<String,Object>> getAllUser(String username,String password); 大于三个参数据,用传递对象 /** * Spring 启动 *

Spring MVC 参数校验

转自:http://blog.csdn.net/eson_15/article/details/51725470 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层

spring boot redis 缓存(cache)集成

Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 spring boot 连接Mysql spring boot配置druid连接池连接mysql spring boot集成mybatis(1) spring boot集成mybatis(2) – 使用pagehelper实现分页 spring boot集成mybatis(3) – mybatis ge

spring boot 环境配置(profile)切换

Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 spring boot 连接Mysql spring boot配置druid连接池连接mysql spring boot集成mybatis(1) spring boot集成mybatis(2) – 使用pagehelper实现分页 spring boot集成mybatis(3) – mybatis ge

21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter)和 监听器(Listener)的注册方法和 Servlet 一样,不清楚的可以查看下上一篇文章(20): 本文将直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener:使用注解 @ServletComponentScan//这个就是扫描相应的Se

Spring Boot Hello World (restful接口)例子

Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 spring boot 连接Mysql spring boot配置druid连接池连接mysql spring boot集成mybatis(1) spring boot集成mybatis(2) – 使用pagehelper实现分页 spring boot集成mybatis(3) – mybatis ge

spring boot 开发环境搭建(Eclipse)

Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 spring boot 连接Mysql spring boot配置druid连接池连接mysql spring boot集成mybatis(1) spring boot集成mybatis(2) – 使用pagehelper实现分页 spring boot集成mybatis(3) – mybatis ge

实用———springmvc接收参数校验

https://www.cnblogs.com/funyoung/p/8670550.html https://www.cnblogs.com/monkeydai/p/10068547.html [email protected] 两粒种子,一片森林. 首页 新随笔 联系 订阅 管理 随笔 - 21  文章 - 0  评论 - 8 两粒种子,一片森林. 首页 新随笔 联系 订阅 管理 随笔 - 21  文章 - 0  评论 - 8 SpringMVC参数校验 使用SpringMVC时配合hibe

Spring Boot 介绍

Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 spring boot 连接Mysql spring boot配置druid连接池连接mysql spring boot集成mybatis(1) spring boot集成mybatis(2) – 使用pagehelper实现分页 spring boot集成mybatis(3) – mybatis ge