gpt4 book ai didi

java - 如何将更多参数传递给 spring validate 方法

转载 作者:行者123 更新时间:2023-11-29 10:14:17 25 4
gpt4 key购买 nike

我有 org.springframework.validation.Validator 的扩展。

public class MyValidator implements Validator {

@Override
public void validate(Object target, Errors errors) {
...
}
}

我的目标是将多个目标传递给方法。

我不喜欢重载 validate 方法的想法,因为它闻起来像糟糕的代码:validate(Object target1, Object target1, Errors errors) 或创建具有所需目标的 map 。

最好了解有关此案例的更好方法。

最佳答案

我没有尝试下面的代码,但它演示了一个基本概念,即如何验证 bean 的一个字段与另一个字段的对比。希望对你有帮助

假设您有以下表单 bean

public class MyForm {
private String id;
private List<String> oldIds;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public List<String> getOldIds() {
return oldIds;
}

public void setOldIds(List<String> oldIds) {
this.oldIds = oldIds;
}

}

并且必须针对 oldIds 对象验证 id 属性(如果我确实正确理解了您的要求)。要实现它,您需要创建一个约束并标记您的 bean。所以,首先是约束接口(interface)

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.validation.Constraint;
import javax.validation.Payload;

@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
@Documented
public @interface MyConstraint {

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

String[] value();
}

接下来,您需要实现约束 validator 类:

import java.util.List;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.apache.commons.beanutils.PropertyUtils;

public class MyConstraintValidator implements
ConstraintValidator<MyConstraint, Object> {

private String firstAttribute;
private String secondAttribute;

@Override
public void initialize(final MyConstraint constraintAnnotation) {
firstAttribute = constraintAnnotation.value()[0];
secondAttribute = constraintAnnotation.value()[1];

}

@Override
public boolean isValid(final Object object,
final ConstraintValidatorContext constraintContext) {
try {
final String id = (String) PropertyUtils.getProperty(object,
firstAttribute);
List<String> oldIds = (List<String>) PropertyUtils.getProperty(
object, secondAttribute);

// do your validation

return true;
} catch (final Exception e) {
throw new IllegalArgumentException(e);
}

}
}

最后,将创建的约束应用于表单bean

@MyConstraint(value = { "id", "oldIds" })
public class MyForm {
// the code
}

现在,您使用 javax.validation 包中的 @Valid 注释标记您的 bean,或者将其提供给 validator 对象

关于java - 如何将更多参数传递给 spring validate 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480843/

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