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

网站添加flv视频代码创意工作室网站

网站添加flv视频代码,创意工作室网站,肇庆市端州发布,wordpress 如何购买主题Spring Boot 校验分组(Validation Groups)高级用法全指南版本:Spring Boot 3.x Jakarta Bean Validation 3.x 目标:用 同一份 DTO 支撑 “新增 / 修改 / 导入 / 审核” 等多套校验规则,零冗余、零硬编码、易扩展。一、…

Spring Boot 校验分组(Validation Groups)高级用法全指南

版本:Spring Boot 3.x + Jakarta Bean Validation 3.x
目标:用 同一份 DTO 支撑 “新增 / 修改 / 导入 / 审核” 等多套校验规则,零冗余、零硬编码、易扩展


一、为什么需要校验分组?

场景规则差异示例
新增id 必须为 null
修改id 必须非 null
导入批量字段可空,但格式必须合法
审核只校验备注长度,其余忽略

传统写法:为每个场景写独立 DTO → 类爆炸、重复字段、维护困难
分组写法一个 DTO + N 个场景接口按需启用,极致简洁。


二、核心三要素(牢记即可)

要素作用示例
分组接口(Marker Interface)标记场景interface Create {}
分组注解指定规则生效范围@NotNull(groups = Update.class)
分组校验调用时声明场景@Validated(Create.class)

三、快速上手(3 步走)

1️⃣ 定义分组接口

public interface Create {}   // 新增
public interface Update {}   // 修改
public interface Import {}   // 批量导入
public interface Audit {}    // 审核

2️⃣ 在 DTO 上按场景声明规则

@Data
public class UserDTO {// 新增时 id 必须为 null;修改时 id 必须非 null@Null(groups = Create.class)@NotNull(groups = Update.class)private Long id;// 所有场景必填@NotBlank(groups = {Create.class, Update.class, Import.class})private String username;// 仅导入场景校验邮箱格式@Email(groups = Import.class)private String email;// 仅审核场景校验备注长度@Size(max = 500, groups = Audit.class)private String remark;
}

3️⃣ 在 Controller 指定场景

@RestController
@RequestMapping("/user")
@Validated   // 告诉 Spring 启用方法级校验
public class UserController {@PostMappingpublic String create(@Validated(Create.class) @RequestBody UserDTO dto) {return "新增成功";}@PutMapping("/{id}")public String update(@PathVariable Long id,@Validated(Update.class) @RequestBody UserDTO dto) {dto.setId(id);return "修改成功";}@PostMapping("/batch")public String batch(@Validated(Import.class) @RequestBody List<@Valid UserDTO> list) {return "导入成功";}@PostMapping("/{id}/audit")public String audit(@PathVariable Long id,@Validated(Audit.class) @RequestBody UserDTO dto) {dto.setId(id);return "审核成功";}
}

四、高级技巧(生产常用)

1️⃣ 组继承(减少重复注解)

public interface Create extends Default {}  // 继承默认组
public interface Update extends Default {}

默认组 javax.validation.groups.Default 可省略 groups = Default.class

2️⃣ 分组序列(按顺序校验)

@GroupSequence({Create.class, SecondStep.class})
public interface CreateTwoStep {}
  • 先校验 Create 规则 → 通过后继续 SecondStep避免一次性抛出所有错误

3️⃣ 动态分组(运行时决定)

@Component
public class ValidationGroupSelector {public Class<?> resolveGroup(String operation) {return switch (operation) {case "create" -> Create.class;case "update" -> Update.class;case "import" -> Import.class;default -> Default.class;};}
}

在 Service 层使用:

Set<ConstraintViolation<UserDTO>> violations =validator.validate(dto, groupSelector.resolveGroup(operation));

五、与常见框架集成

框架用法
Spring MVC@Validated(Group) + 全局异常处理
Spring BatchItemProcessor 中手动 validator.validate(item, Import.class)
MapStruct映射后调用 validator.validate(dto, Update.class) 确保 DTO 合法

六、避坑清单

解决
默认组未生效显式继承 Default 或显式声明 groups = Default.class
集合参数未生效使用 List<@Valid DTO> + @Validated(Group)
构造器注入构造器参数上同样加 @Validated(Group)

七、一句话总结

“一个 DTO + N 个 Marker 接口”
让 Spring Boot 的 同一份数据模型不同业务场景 下拥有 不同校验规则
彻底告别 DTO 冗余if-else 校验地狱

http://www.dtcms.com/a/404097.html

相关文章:

  • MySQL-事务基础
  • 学习游戏制作记录(史莱姆敌人的制作)
  • 创建一个网站一般步骤有哪些网站开发python
  • 江苏省建设厅官网网站首页网站建设二次开发怎么样
  • 安徽网站建设公司哪家好上海域名icp海网站建设
  • 北京住房城乡建设部网站首页搭建论坛需要多少钱
  • 养老网站建设方案咨询类网站建设方案书
  • Java算法起航:数据结构与复杂度入门
  • 市北区开发建设局 网站老客户网站建设
  • 足球直播网站开发定制检察院网站建设
  • dw软件网站建设教程视频云阳网站建设公司
  • Ubuntu 20.04上安装Miniconda3(一)
  • 免费网站模板素材一般淘宝网站做几个月赚钱
  • 可以做设计兼职的网站有哪些工作狮城app更多网站
  • 区域提议(Region Proposal)
  • 交互性强的网站龙轩导航
  • 为什么网站关键词没有排名产品推广ppt范例
  • 前沿系统级编程:Zig 与 Rust 技术深度解析与实践
  • Spring Boot 中@RestController注解的详解和使用
  • 滨州论坛网站建设怎样做网站 知乎
  • Vue.js响应式API
  • 汕头网站建设培训公司手机开发者选项怎么关闭
  • 电子商务网站的建设目标织梦移动端网站模板下载
  • 2025.9.24总结
  • 基于 OpenCV 的 FisherFaceRecognizer 人脸识别与中文标签显示实践
  • 推荐个临汾做网站的如何自己创建购物网站
  • 做靓号网站网络黄页进入有限公司
  • 建设企业网站个人网银wordpress有多大的数据量
  • GD32E103CBT8-空闲中断DMA接收
  • 网站在正在建设中网站建设销售秘籍