【SpringBoot】分组校验和自定义校验

分组检验

参数校验时,我们希望不同的方法参数校验规则不同,这时就需要分组校验。

public class Category {
   
    @NotNull(groups = Update.class)
    private Integer id;//主键ID
    @NotEmpty
    private String categoryName;//分类名称
    // @NotEmpty(groups = {Add.class, Update.class})
    @NotEmpty
    private String categoryAlias;//分类别名
    private Integer createUser;//创建人ID
    @JsonFormat(pattern = "yyyy-MM-dd MM:mm:ss")
    private LocalDateTime createTime;//创建时间
    @JsonFormat(pattern = "yyyy-MM-dd MM:mm:ss")
    private LocalDateTime updateTime;//更新时间
    public interface Add extends Default {
   

    }

    public interface Update extends Default {
   

    }

}

    @PostMapping
    public Result add(@RequestBody @Validated(Category.Add.class) Category category) {
   
        categoryService.add(category);
        return Result.success();
    }
    
    @PutMapping
    public Result update(@RequestBody @Validated(Category.Update.class) Category category) {
   
        categoryService.update(category);
        return Result.success();
    }

自定义校验

package com.heo.anno;

import com.heo.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented  // 元注解  抽取 State 到帮助文档内
@Constraint(
        validatedBy = {
   StateValidation.class}  // 指定校验规则的类
)
@Target({
   FIELD})  // 元注解 表明注解使用的场合 FIELD 表示 使用在属性上
@Retention(RUNTIME)  // 元注解 注解在哪个阶段会被保留
public @interface State {
   
    // 提供校验失败后的提示信息
    String message() default "state参数的值只能是已发布或者草稿";
    // 指定分组
    Class<?>[] groups() default {
   };
    // 负载 注解的附加信息
    Class<? extends Payload>[] payload() default {
   };
}

package com.heo.validation;

import com.heo.anno.State;
import jakarta.validation.Constraint;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

/**
 * 自定义接口的校验规则类
 * State 给哪个注解提供校验规则
 * String 校验的数据类型
 */
public class StateValidation implements ConstraintValidator<State, String> {
   
    /**
     *
     * @param s 将来要校验的数据
     * @param constraintValidatorContext
     * @return 返回 false 校验不通过,true 则通过
     */
    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
   
        // 提供校验规则
        if (s == null) {
   
            return false;
        }
        if (s.equals("已发布") || s.equals("草稿")) {
   
            return true;
        }
        return false;
    }
}

相关推荐

  1. SpringBoot分组校验定义校验

    2024-01-05 22:46:02       64 阅读
  2. Springboot参数分组校验

    2024-01-05 22:46:02       37 阅读
  3. Spring Boot编写定义校验注解

    2024-01-05 22:46:02       56 阅读
  4. django校验token定义中间件

    2024-01-05 22:46:02       51 阅读
  5. Vue中的定义参数校验

    2024-01-05 22:46:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-05 22:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-05 22:46:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-05 22:46:02       82 阅读
  4. Python语言-面向对象

    2024-01-05 22:46:02       91 阅读

热门阅读

  1. 机器学习-聚类算法详解

    2024-01-05 22:46:02       61 阅读
  2. 2024年全球网络安全预测报告

    2024-01-05 22:46:02       39 阅读
  3. git 常用命令 help命令

    2024-01-05 22:46:02       54 阅读
  4. C语言多线程编程-线程同步

    2024-01-05 22:46:02       54 阅读
  5. express框架搭建后台服务

    2024-01-05 22:46:02       50 阅读
  6. adb push有中文名的文件到sdcard 正常我们

    2024-01-05 22:46:02       72 阅读
  7. Python编写代码可以帮助学习测试基础方面的知识

    2024-01-05 22:46:02       59 阅读
  8. FastGPT的安装部署

    2024-01-05 22:46:02       57 阅读
  9. Nginx

    Nginx

    2024-01-05 22:46:02      58 阅读
  10. uniapp前置摄像头拍照功能怎么实现?

    2024-01-05 22:46:02       61 阅读
  11. C++入门【20-C++ 指针的算术运算】

    2024-01-05 22:46:02       51 阅读
  12. 博客随手记

    2024-01-05 22:46:02       60 阅读
  13. OpenCV-Python(22):2D直方图

    2024-01-05 22:46:02       49 阅读
  14. 序言:《未来已来》

    2024-01-05 22:46:02       54 阅读