Spring Boot下如何校验Spring MVC的请求参数及如何自定义校验注解

网站建设3年前发布
66 0 0

在Java世界里,用于Java Bean的校验的标准规范是JSR 380,又被称作Bean Validation 2.0。而JSR 380的实现是Hibernate Validator。,Spring Boot提供了spring-boot-starter-validation 为Bean的校验提供支持。我们可以通过一系列的校验注解对Java Bean的属性进行校验。,本文将演示如何在对Spring MVC的请求参数进行校验。当然它可以用在任何Java Bean的校验上。,我们先新建一个演示项目,注意除了添加“Spring Web”依赖,还需要额外添加“Validation”依赖,从Spring Boot 2.3后,我们需要显示添加此依赖。,20230306132120c16e78513fb6229c2ec012039dbe4e07be4acd572,在DTO这个JavaBean上使用JSR 380注解,主要的注解有:,注意上面的“message”中设置提示错误的信息。,1、校验DTO,只需要在@RequestBody前加上注解“@Valid”,若出现校验错误,抛出MethodArgumentNotValidException,2、检验请求中的参数(包括路径变量),我们需要在类上注解“@Validated”才会生效,若出现校验错误,抛出ConstraintViolationException。此处的@Range注解来自于Hibernate Validator,非标准JSR 380注解。,当出现校验错误时,Spring Boot只会抛出异常,所以为了让前端更友好的处理这些异常,我们将对这些抛出的异常做出处理。,运行应用,并违反校验规则,如图:,20230306132303510c06757654d44e2605059a4086204f267ada486,2023030613212135879c622754b2e02c7608156976aba9240d1e382,上面我们使用了JSR 380以及Hibernate的注解来校验,这节我们演示如何自定义校验注解。,我们通过定义个校验注解“@Enumeration”和在“EnumerationValidator”类中定义校验规则。,当前例子演示功能为:只能是枚举里允许的值,否则校验不通过。,1、message属性定义错误信息,2、values设置可选的枚举值,3、通过“@Constraint”指定校验的类,注意:若没有groups()和payload(),会报:javax.validation.constraintdefinitionexception: hv000074,这里的逻辑很简单,只需要可选的枚举值包含被校验的值即可。,启动验证结果:,20230306132122d432a9d7325fa3088d747253f77128ebcab98e928,感谢对我的书《从企业级开发到云原生微服务:Spring Boot实战》的支持。,https://medium.com/codex/spring-boot-create-custom-annotation-to-validate-request-parameter-dcf483539d90,https://www.baeldung.com/spring-boot-bean-validation,https://reflectoring.io/bean-validation-with-spring-boot/,文章出自:​​爱科学的卫斯理​​,如有转载本文请联系爱科学的卫斯理今日头条号。

© 版权声明

相关文章