@Valid与@Validate修改为快速失败

本文介绍了如何在Spring Boot项目中将@Valid与@Validate注解的参数校验设置为快速失败模式。默认情况下,验证器会检查所有参数,但通过修改配置,可以在一个参数校验失败后立即抛出异常,提高系统效率。
摘要由CSDN通过智能技术生成

@Valid与@Validate修改为快速失败

1. 背景

在开发项目的过程中,后端经常使用 @Valid 或者 @Validate 注解来校验前端传过来的参数,默认是校验所有的参数,如果没有校验通过就会抛出异常。并且后端一般会使用 @RestControllerAdvice 和 @ExceptionHandler 注解进行了全局异常的捕获,再响应异常信息,但是由于校验了所有的参数,并且 @ExceptionHandler 处理逻辑是将所有没有校验通过的字段错误信息响应给前端,所以响应错误信息就会有多条。

2. 目的

在不改动 @ExceptionHandler 注解方法逻辑的情况下,只要校验一个参数失败,就马上抛出异常,不对之后的参数进行校验。这样不仅符合实际需求,又节省了系统资源。

3. 如何定位源码修改点

在百度简单搜索之后,发现使用 @Valid 或者 @Validate 注解来校验前端传过来的参数,是通过一个验证器 Validator 来实现的。由于在Spring 中,一般都会把核心对象注入 Spring 容器,哪里需要就直接从容器中获取就行。想到这里,利用 IDEA 的 Bean 自动注入可以查找到对应 Bean 声明的地方特点。

@Autowired
private javax.validation.Validator validator;

在这里插入图片描述

点击绿色点,直接导航到声明 Bean 的代码的地方,Navigate to the autowired dependencies

package org.springframework.boot.autoconfigure.validation;

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ExecutableValidator.class)
@ConditionalOnResource(resources = "classpath:META-INF/services/javax.validation.spi.ValidationProvider")
@Import(PrimaryDefaultValidatorPostProcessor.class)
public class ValidationAutoConfiguration {
   

    /**
     * 看到了 @ConditionalOnMissingBean(Validator.class) 意味着找对了地方
     */
	@Bean
	@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
	@ConditionalOnMissingBean(Validator.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值