当前位置: 首页 > news >正文

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

分组检验

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

public class Category {@NotNull(groups = Update.class)private Integer id;//主键ID@NotEmptyprivate String categoryName;//分类名称// @NotEmpty(groups = {Add.class, Update.class})@NotEmptyprivate 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 {}}
    @PostMappingpublic Result add(@RequestBody @Validated(Category.Add.class) Category category) {categoryService.add(category);return Result.success();}@PutMappingpublic 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 则通过*/@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 提供校验规则if (s == null) {return false;}if (s.equals("已发布") || s.equals("草稿")) {return true;}return false;}
}
http://www.lryc.cn/news/272718.html

相关文章:

  • 19、BLIP-2
  • 【微服务核心】MyBatis Plus
  • 什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍
  • Spark---RDD算子(单值类型Value)
  • 数据库中的MVCC--多版本并发控制
  • wps将姓名处理格式为:姓**
  • 2023年我的编程之旅:技术演进与自我成长的纪录
  • 好用免费的WAF---如何安装雷池社区版
  • 看似 bug 又非 bug 的一个 bug
  • mysql常见问题
  • QT上位机开发(串口界面设计)
  • k8s之pod
  • 第二百四十三回 再分享一个Json工具
  • electron自定义菜单
  • 变量和函数提升(js的问题)
  • Excel 插件:ASAP Utilities Crack
  • hyperf 十九 数据库 二 模型
  • 使用python快速开发与PDF文档对话的Gemini聊天机器人
  • Spring Cloud Gateway集成Knife4j
  • Hive10_窗口函数
  • ipvsadm命令详解
  • zabbix通过自动发现-配置监控项、触发器(小白教程)
  • Dockerfile文件介绍
  • 【PHP】函数array_reduce()使用场景
  • 软件测试基础理论学习-软件测试方法论
  • Unity 关于点击不同物品移动并触发不同事件
  • c++IO库详细介绍
  • 海外静态IP和动态IP有什么区别?推荐哪种?
  • OpenHarmony从入门到放弃(一)
  • Unity3D UGUI图集打包与动态使用(TexturePacker)