json - JSON:Spring Boot 条件验证
问题描述
我有一个用 Spring Boot 编写的 POST API。我需要有条件地验证一些数据。例如,这是我的 JSON:
{
"p1": false,
"p2": true,
"p3": false
}
我想在这里实现的验证是
如果
p1
是false
,那么p3
也应该是false
。如果
p1
是true
,p3
则不需要true
。
Spring中是否有一些条件JSON验证示例可供参考?
解决方案
您可以为您的对象编写自定义约束。
其余终点。
@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public ResponseEntity<String> doSomething(@RequestBody @Valid MyObject myObject) {
身体 POJO。
@MyConstraint(message = "p1 is false, p3 should also be false")
public class MyObject {
private boolean p1;
private boolean p2;
private boolean p3;
//getters and setters
}
正在使用的约束注释MyObject
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {
String message() default "Invalid object";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
约束启动的验证器。
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, MyObject> {
@Override
public boolean isValid(MyObject value, ConstraintValidatorContext context) {
if (!value.isP1()) {
return value.isP1() == value.isP3();
}
return true;
}
}
推荐阅读
- python - 在 python 中安装 selenium 包时出现环境错误
- kotlin - Kotlin 将列表划分为列表
- azure-functions - Azure Functions - 尝试以访问禁止的方式访问套接字
- typescript - 无法使用 TypeScript 从外部 NPM 库导入命名导出
- scala - Spark Session 返回错误:Apache NiFi
- mysql - Spring Jpa Query:将多个参数传递给本机查询IN子句
- javascript - 如何在 React with Material-UI 中为未知孩子添加样式?
- google-api - 无法从谷歌驱动器下载文件
- r - 基于唯一 ID 的列到行
- java - 当您不是文件所有者时,Java File.setLastModified() 在 Linux 上失败