Spring Boot 使用 Validated group 分组校验
Spring Boot 大约 1536 字group
@Valid
是javax
中的注解,它有一个group
字段,但javax
没有实现分组校验。
Spring Validation
实现了这个功能,配合@Validated
注解可以实现:同一个请求对象,同一份校验注解,不同接口,不同的校验逻辑。
/basic
:只校验BasicInfo
的group
。/advance
:只校验AdvanceInfo
的group
。/combine
:只校验Combine
的group
。(Combine
上定义了@GroupSequence
,表示:校验的顺序,也可起到同时校验的作用)
@PostMapping("/basic")
public String basic(@Validated(BasicInfo.class) @RequestBody Signup req) {
System.out.println("basic#" + req.toString());
return req.toString();
}
@PostMapping("/advance")
public String advance(@Validated(AdvanceInfo.class) @RequestBody Signup req) {
System.out.println("advance#" + req.toString());
return req.toString();
}
@PostMapping("/combine")
public String combine(@Validated(Combine.class) @RequestBody Signup req) {
System.out.println("combine#" + req.toString());
return req.toString();
}
name
、phone
、captcha
字段是BasicInfo
需要校验的。
captcha
、address
字段是AdvanceInfo
需要校验的。
Combine
接口上定义的@GroupSequence
的作用:校验的顺序,也可起到同时校验的作用;这处表示先检验BasicInfo
,再校验AdvanceInfo
,且需要同时满足BasicInfo
和AdvanceInfo
校验条件。
@Data
public class Signup {
@NotBlank(groups = BasicInfo.class)
private String name;
@NotBlank(groups = BasicInfo.class)
private String phone;
@NotBlank(groups = {BasicInfo.class, AdvanceInfo.class})
private String captcha;
@NotBlank(groups = AdvanceInfo.class)
private String address;
public interface BasicInfo {}
public interface AdvanceInfo {}
@GroupSequence({BasicInfo.class, AdvanceInfo.class})
public interface Combine {}
}
参考
阅读 1133 · 发布于 2022-10-07
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Spring Boot 中的 ApplicationRunner 和 CommandLineRunner阅读 2903
-
Spring Boot 单元测试无法 mock @Value 标注的字段阅读 235
-
HTML 使用 tabindex 控制 Tab 键按键顺序阅读 505
-
HTTP 携带多个 Cookie 请求阅读 2174
-
走进 Spring Boot 第一步之 Java Properties 类阅读 2347
-
Android VideoView 播放本地视频短暂黑屏的解决方法阅读 5142
-
Java 多级目录的文件夹拷贝阅读 861
-
AWS 更换 SSH 登陆密钥对阅读 1937
-
MySQL 外键阅读 1792
-
Android ContentProvider批量插入数据阅读 3834