0

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

 1 year ago
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自定义验证注解(简单实现)

精选 原创

代码不是马 2022-10-17 14:39:24 博主文章分类:JAVA ©著作权

文章标签 java 解析器 spring 自定义注解 文章分类 Java 编程语言 阅读数157

首先引入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自定义验证注解(简单实现)_自定义注解

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK