我收到从JSON
客户请求正文反序列化的域对象ID的列表:
@JsonProperty("workgroups")
private List<WorkgroupId> workgroupIds = new ArrayList<>();
我需要在org.springframework.validation.Validator
中验证这些ID。
for (WorkgroupId workgroupId : project.getWorkgroupIds()) {
if (!domainObjectTools.doesWorkgroupExist(workgroupId)) {
// reject this invalid value here...
}
}
问题
如何拒绝org.springframework.validation.Errors
中的无效值?
答案 0 :(得分:-1)
Validator界面:
@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { CustomValidatorValidator.class })
@Documented
public @interface CustomValidator{
String message() default "Put here your default message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
ValidatorImplementation:
public final class CustomValidatorValidator implements ConstraintValidator<CustomValidator, List<WorkgroupId>> {
@Override
public void initialize(CustomValidator constraintAnnotation) {
}
@Override
public boolean isValid(List<WorkgroupId> yourlist, ConstraintValidatorContext context) {
if (yourlist== null)
return true;
else
return yourlist.stream().anyMatch(s -> /* filter here as you want */);
}
}
请注意,如果该字段为空,我们将返回true
,我这样做是因为如果不需要为空,我就放@NotNull
约束,这样我就可以对该约束有更多的控制权。>
最后:
@JsonProperty("workgroups")
@CustomValidator
private List<WorkgroupId> workgroupIds = new ArrayList<>();
P.S:我不明白您为什么要在最后的代码中初始化列表。如果这是您应该通过请求接收的字段,那么您无需对其进行初始化,则json反序列化程序将使用json中的传入字段对其进行初始化。
答案 1 :(得分:-1)
您可以将 reject()和/或 rejectValue()与字段/错误代码/ defaultMessage或自定义验证器一起使用来拒绝值。 / p>