【发布时间】:2018-05-20 08:35:42
【问题描述】:
我已经用方法实现了控制器:
public Page<EventDto> search(@ModelAttribute @Valid EventsCriteria criteria){...}
它有效。 EventsCriteria 本身没有特殊的单独验证器,因为它具有内部注释检查器,例如 @NotNull @NotEmpty。现在情况发生了变化,只有这个验证器是不够的。所以我添加并注册了相应的服务来验证一些状态。
我希望服务能够像以前一样验证其他复合案例和单一验证。但是像@NotNull @NotEmpty 这样的单个内部注释检查器不再起作用了。
我是否配置错误或无法同时工作(指定的服务和内部检查器)?
我的验证器示例(在 cmets 中被询问)
没有什么特别的,如果你知道春天,所以我错过了这部分,因为我把你的注意力集中在我的问题上。
@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);
}
}
}
【问题讨论】:
-
BindingResult bindingResult在你的控制器方法中添加这个 -
if(bindingResult.hasErrors()){return "errorr"}在此处检查条件并根据需要作为错误消息或页面返回 -
你能分享你的自定义验证码吗?
-
@javaguy 我不确定您的请求是否与解决方案相关,但我只是以任何方式添加了它:)
标签: java validation spring-mvc spring-config