我已经用方法实现了控制器:
public Page<EventDto> search(@ModelAttribute @Valid EventsCriteria criteria){...}
有用。EventsCriteria
本身没有特殊的单独验证器,因为它具有内部注释检查器,例如@NotNull
@NotEmpty
. 现在情况发生了变化,只有这个验证器是不够的。所以我添加并注册了相应的服务来验证一些状态。
我希望服务能够像以前一样验证其他复合案例和单一验证。但是我的单个内部注释检查器@NotNull
@NotEmpty
不再起作用。
我是否配置错误或无法同时工作(指定的服务和内部检查器)?
我的验证器示例(正如评论中所要求的那样)
没有什么特别的,如果你知道春天,所以我错过了这部分就像不重要的一样,把你的注意力集中在我的问题上。
@Component
public class EventsCriteriaValidator implements Validator {
public static final String INVALID_RAGE_PARAMETERS_SPECIFIED = "Invalid rage parameters: please specify " +
"'from' and 'to' or page 'size";
@Override
public boolean supports(Class<?> clazz) {
return clazz.isAssignableFrom(EventsCriteria.class);
}
@Override
public void validate(Object target, Errors errors) {
EventsCriteria toValidate = (EventsCriteria) target;
validateComplexRestriction(toValidate, errors);
}
private void validateComplexRestriction(EventsCriteria toValidate, Errors errors) {
if (toValidate.isRangeEmpty() && toValidate.getSize() == 0) {
errors.rejectValue(SIZE_FIELD, null, INVALID_RAGE_PARAMETERS_SPECIFIED);
}
}
}