gpt4 book ai didi

java - JSR-303 Bean Validation 注释多个字段

转载 作者:行者123 更新时间:2023-12-02 07:54:35 31 4
gpt4 key购买 nike

我刚刚开始测试 JSR-303 Bean 验证,想知道是否有可能。我们的应用程序中有一个适用于所有字符串字段的默认正则表达式。如果我想使用 bean 验证来应用此功能,我想我需要注释表单对象中的每个字段。

@Pattern(regexp = REG_EXP)
private String aString;

@Pattern(regexp = REG_EXP)
private String anotherString;

是否可以一次性将 @Pattern 应用于所有字符串(或某些字段)?我们在 Weblogic 10.3.4 上使用 Hibernate 实现,并以 JSF2.0 作为前端。验证应该独立于 View ,因为我可能来自网络服务。

最佳答案

要一次验证多个字段,请在类型级别使用注释并编写一个自定义 validator ,使用 REGEXP 检查所有字符串字段。

编辑:提供示例。这非常丑陋,因为它使用了反射并违反了安全性,但也许它给了你一个大概的想法。如果您不使用“对象”而是使用具体的类或接口(interface),那么您可能会使用常规 getter 取得成功。

被测试的类(和运行者)

   import javax.validation.Validation;
import javax.validation.Validator;

import validation.AllStringsRegex;

@AllStringsRegex(value="l")
public class UnderValidation {
String a;
String b;

public static void main(String... args) {
UnderValidation object = new UnderValidation();
object.a = "hello";
object.b = "world";

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
System.out.println(validator.validate(object));
}
}

我的注释:

@Target( { TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = AllStringsRegexValidator.class)
@Documented
public @interface AllStringsRegex {
String message() default "String not regex";
String value() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

我的 validator

public class AllStringsRegexValidator implements ConstraintValidator<AllStringsRegex, Object> {
private Pattern pattern = null;

@Override
public void initialize(AllStringsRegex annotation) {
pattern = Pattern.compile(annotation.value());
}

@Override
public boolean isValid(Object object, ConstraintValidatorContext ctx) {
for (Field f : object.getClass().getDeclaredFields()) {
if (f.getType().equals(String.class)) {
try {
f.setAccessible(true);
String value = (String)f.get(object);
if (!pattern.matcher(value).find()) {
return false;
}
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return true;
}
}

关于java - JSR-303 Bean Validation 注释多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804009/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com