别用ifelse了,手把手教在 Spring Boot中进行参数校验?

简介: 别用ifelse了,手把手教在 Spring Boot中进行参数校验?

开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码image.png这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。接下来,用Validation来改写这段

1、Spring Boot文档中的Validation

在 Spring Boot 的官网中,关于Validation只是简单的提了一句,如下image.png其实,Spring Validator 和Hibernate Validator是两套Validator,可以混着用,这里我们用Hibernate Validator

2、Hibernate Validator

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

3、Spring Validator

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

4、示例

4.1、引入spring-boot-starter-validation

image.png

4.3、适用@Valid校验,并将校验结果放到BindingResult对象中image.png注意:

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

4.4、看效果

image.png如果在校验的对象后面再加上Model对象的话,如果返回的是ModelAndView就可以将这个Model设置到其中,这样在页面就可以取到错误消息了image.png仅仅只是单字段校验的话未免也太不灵活了吧,如果字段之间有关联关系,那该如何校验呢?答案是自定义

4.5、自定义校验规则

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraintsimage.png这里,以优惠券创建为例来演示如何自定义校验规则首先,优惠券表单如下(仅仅只是演示用):image.png这里除了自定义了两条校验规则之外,还用到了分组。为什么要有分组这一说呢?因为,举个例子,添加的时候不需要校验id,而修改的时候id不能为空,有了分组以后,就可以添加的时候校验用组A,修改的时候校验用组B下面重点看一下@CheckTimeInterval第一步 、定义一个注解叫CheckTimeIntervalimage.pngimage.pngimage.png言归正传第三步 、验证image.pngimage.png看,自定义的校验生效了

5、补充

5.1、校验模式

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast下面补充一点,关于校验模式默认会校验完所有属性,然后将错误信息一起返回,但很多时候不需要这样,一个校验失败了,其它就不必校验了为此,需要这样设置image.png

5.2、单个参数校验

image.png如果是调整页面的时候参数校验失败的话,这时可以不做处理,让其调到错误页面。如果是接口参数校验失败的话,可以在这里进行统一处理,并返回。例如:image.png

5.3、错误页面image.png以刚才优惠券详情为例http://localhost:8080/coupon/detail.html      400http://localhost:8080/coupon/detail.html?id=    400http://localhost:8080/coupon/detail.html?id=abc   400http://localhost:8080/coupon/detail222.html?id=123  404无权限  403int a = 1 / 0;  500

5.4、@Valid与@Validated

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

参考

http://rensanning.iteye.com/blog/2357373https://blog.csdn.net/kenight/article/details/77774465https://www.cnblogs.com/mr-yang-localhost/p/7812038.htmlhttps://www.phpsong.com/3567.htmlhttps://www.cnblogs.com/mr-yang-localhost/p/7812038.html

目录
相关文章
|
3天前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
15天前
|
Java API 数据格式
Spring Boot API参数读取秘籍大公开!6大神器助你秒变参数处理大师,让你的代码飞起来!
【8月更文挑战第4天】Spring Boot凭借其便捷的开发和配置特性,成为构建微服务的热门选择。高效处理HTTP请求参数至关重要。本文介绍六种核心方法:查询参数利用`@RequestParam`;路径变量采用`@PathVariable`;请求体通过`@RequestBody`自动绑定;表单数据借助`@ModelAttribute`或`@RequestParam`;请求头使用`@RequestHeader`;Cookie则依靠`@CookieValue`。每种方法针对不同场景,灵活运用可提升应用性能与用户体验。
38 9
|
16天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
43 3
|
17天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
40 2
|
22天前
|
Java Spring
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数
41 7
|
18天前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
19 0
|
1月前
|
Java 测试技术 Spring
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息
|
1月前
|
存储 Java Spring
在Spring Boot中实现数据验证与校验
在Spring Boot中实现数据验证与校验
|
2月前
|
XML Java 数据库
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
23 0
|
21天前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。