Java 是否有更简单的方法进行DTO验证?
目前我正在从事SpringBoot项目,创建一个微服务。我喜欢使用Java 是否有更简单的方法进行DTO验证?,java,spring,hibernate,validation,Java,Spring,Hibernate,Validation,目前我正在从事SpringBoot项目,创建一个微服务。我喜欢使用javax.validation.constraints.*注释来做一些简单的验证工作,比如检查NotNull和Size验证,然后使用javax.validation.Validator一次性捕获所有这些验证约束。但是,如果我想为一些字段添加一些自定义验证,例如,如果我有一个年龄字段,并且如果年龄大于18,我会检查该年龄是否有效,考虑到我的类中有许多字段,有没有更简单、更干净的方法来进行此类验证 查看现有的代码库,我发现其他人已经
javax.validation.constraints.*
注释来做一些简单的验证工作,比如检查NotNull
和Size
验证,然后使用javax.validation.Validator
一次性捕获所有这些验证约束。但是,如果我想为一些字段添加一些自定义验证,例如,如果我有一个年龄字段,并且如果年龄大于18,我会检查该年龄是否有效,考虑到我的类中有许多字段,有没有更简单、更干净的方法来进行此类验证
查看现有的代码库,我发现其他人已经为每个字段编写了一个函数,用于验证特定字段。然后从一个地方调用所有此类函数以获取所有错误。似乎应该有一种比这种方法更方便的方法
我还知道,我可以通过创建自己的注释来创建自己的javax约束验证,这是我从中学习到的。除了编写我自己的注释和另一个实现ConstraintValidator
的类之外,还有更简单的方法吗。顺便说一下,我用的是Java11,函数式编程方法也不错
我的想法是遵循与创建自定义约束验证相同的过程。但在注释中,我会添加另一个类似的字段
@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 {};
}
这样做的好处是,我仍然能够在一次捕获所有违反约束的情况。但这里的问题是java不允许注释中的函数
感谢您的所有建议。似乎您正在重新发明,但不一定要重新发明任何东西,这只是在现有代码库中完成的另一种方式,即为每个字段创建单独的isValid函数,然后调用这些isValid函数中的每一个都是另一个函数。这意味着
Validator
最终将成长为一个可怕的god类,并且可能无法用于其他需要类似验证的对象。
@Validate(func = field1Validator)
private String field1;
@Validate(func = field2Validator)
private String field2;