当前,我正在Spring Boot项目中创建微服务。我喜欢使用javax.validation.constrainsts.*
批注进行简单的验证工作的想法,例如检查NotNull
和Size
验证,然后使用javax.validation.Validator
一次性捕获所有这些验证约束。但是,如果我想为某些字段添加一些自定义验证(例如,如果我有一个年龄字段),并且如果该年龄大于18岁,我会检查该年龄是否有效,那么是否有更简便,更干净的方法来进行此类验证,考虑到我班上有很多领域。
看看现有的代码库,我发现其他人为每个字段编写了一个函数,该函数将验证特定字段。然后从一个位置调用所有此类函数以获取所有错误。似乎肯定有比这种方法更方便的方法。
我还知道我可以通过创建自己的注释来创建自己的javax约束验证,该注释是从here中学到的。除了编写自己的注释以及实现ConstraintValidator
的另一个类之外,还有其他更简便的方法来做到这一点。顺便说一下,我正在使用Java 11,函数式编程方法也不错。
我想到了与创建自定义约束验证相同的过程。但是在注释中,我将添加另一个类似的字段
@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = Validator.class)
public @interface Validate {
// Extra field
Function<Object, Boolean> func();
String message() default "Invalid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
所以现在我应该能够将自定义函数传递给注释,可以对所有字段使用相同的注释,但是可以根据需要使用不同的函数,例如:
@Validate(func = field1Validator)
private String field1;
@Validate(func = field2Validator)
private String field2;
这样做的好处是,我仍然可以一口气捕获所有约束冲突。但是这里的问题是java不允许注释中使用Function。
任何人和所有建议都将受到赞赏。