

SpringBoot下Validation自定义验证注解(简单实现)
source link: https://blog.51cto.com/yipeng98/5762848
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SpringBoot下Validation自定义验证注解(简单实现)
精选 原创首先引入validation依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
自定义解析器
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* @Author: yipeng.liu
* @Date: 2022/9/13 14:41
* @Description: 自定义验证 解析器
*/
public class CustomValidatorConfig implements ConstraintValidator<CustomValidator,String> {
@Override
public boolean isValid(String value,ConstraintValidatorContext context) {
System.out.println("进入验证>>>>>>>>>>>>>>>>>>>>");
return value != null &&value.equals("123");
}
}
需要实现ConstraintValidator接口,第一个是自定义注解,第二个是注解修饰的属性类型,然后我们需要重写isValid方法,如果返回true,则表示验证通过,如果返回false,表示验证失败并抛出异常。
isValid(String value, ConstraintValidatorContextcontext) 传入的第一个参数就是需要验证的字段值。既然已经拿到验证字段了,便可以使用来进行我们业务逻辑的校验。
自定义注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* @Author: yipeng.liu
* @Date: 2022/9/13 14:40
* @Description:
*/
@Documented
@Target(value =ElementType.FIELD)
@Retention(value =RetentionPolicy.RUNTIME)
@Constraint(validatedBy= CustomValidatorConfig.class)
public @interface CustomValidator {
String message() default "Incorrectdate format";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
自定义注解比普通注解多出@Constraint来进行修饰,validatedBy就是我们上方写的注解校验器(CustomValidateDateConfig)如果两个ConstraintValidator(验证器)引用同一类型,将发生异常。
这里需要加上groups属性来提供分组校验功能,否则valid校验的时候会抛出异常提示没有groups属性,
payload同理
使用
请求对象CustomValidateDTO
import com.example.demo.annotation.CustomValidator;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
- @Author: yipeng.liu
- @Date: 2022/9/13 14:55
- @Description:
*/
@Data
public class CustomValidateDTO {
@CustomValidator(message = "参数不正确")
private String data;
@NotNull
private String str;
}
控制层ValidateTestController
import com.example.demo.domain.CustomValidateDTO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
- @Author: yipeng.liu
- @Date: 2022/9/13 14:53
- @Description:
*/
@RestController
public class ValidateTestController {
@PostMapping("customValidate")
public boolean test(@Valid @RequestBodyCustomValidateDTO customValidateDTO) {
System.out.println(customValidateDTO.getData());
return true;
}
}
请求

Recommend
-
4
环境:SpringBoot2.3.8.RELEASE + JDK1.8 本文教你如何在SpringBoot环境下使得自定义的注解能够使用${xxx}表达式。 相关依赖
-
7
【DB系列】SpringBoot缓存注解@Cacheable之自定义key策略及缓存失效时间指定 ...
-
27
SpringBoot Validation 表单验证SpringBoot Validation 表单验证 2021/08/19 Java Web SpringBoot 示例代码:GitHub:
-
6
在实际生产项目中,经常需要对如身份证信息、手机号、真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密、漏加密、业务人员需要知道实际的加密规则等的情况。 本文将介绍使用springboot+m...
-
3
java注解从 JDK 5开始,Java 增加了注解的新功能,注解其实是代码里面的特殊标记,这些标记可以在编译、类加载和运行时被读取,在不改变代码原有逻辑下,给源文件嵌入注解信息。再通过返回获取注解信息,根据不同的注解信息处理不同逻辑。其中 Java 有...
-
4
SpringBoot使用自定义注解+AOP+Redis实现接口限流
-
9
我们在企业级的开发中,必不可少的是对日志的记录,实现有很多种方式,常见的就是基于AOP+注解进行保存,但是考虑到程序的流畅和效率,我们可以使用异步进行保存,小编最近在spring和springboot源码中看到有很多的监听处理贯...
-
6
1 springBoot的依赖 确定项目中包含可以注解的依赖 <dependency> <groupId>org.springframework.boot</groupId> <...
-
2
在 SpringBoot 项目中简单实现 JWT 验证 使用 SpringBoot...
-
7
SpringBoot + 自定义注解 + AOP 高级玩法打造通用开关 最近在工作中迁移代码的时候发现了以前自己写的一个通用开...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK