Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有更简单的方法进行DTO验证?_Java_Spring_Hibernate_Validation - Fatal编程技术网

Java 是否有更简单的方法进行DTO验证?

Java 是否有更简单的方法进行DTO验证?,java,spring,hibernate,validation,Java,Spring,Hibernate,Validation,目前我正在从事SpringBoot项目,创建一个微服务。我喜欢使用javax.validation.constraints.*注释来做一些简单的验证工作,比如检查NotNull和Size验证,然后使用javax.validation.Validator一次性捕获所有这些验证约束。但是,如果我想为一些字段添加一些自定义验证,例如,如果我有一个年龄字段,并且如果年龄大于18,我会检查该年龄是否有效,考虑到我的类中有许多字段,有没有更简单、更干净的方法来进行此类验证 查看现有的代码库,我发现其他人已经

目前我正在从事SpringBoot项目,创建一个微服务。我喜欢使用
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;