SpringBoot下Validation自定义验证注解(简单实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    


请求

以上是关于SpringBoot下Validation自定义验证注解(简单实现)的主要内容,如果未能解决你的问题,请参考以下文章

自定义validation注解:解决动态多字段联动校验问题

开发错误记录SpringBoot2.3.0使用validation无法校验参数的问题

Springboot之自定义校验注解

SpringBoot2 @validated 自定义效验类型

SpringMvc,Springboot统一校验自定义异常全局异常处理

SpringMvc,Springboot统一校验自定义异常全局异常处理