【发布时间】:2019-07-09 19:00:54
【问题描述】:
我有一个BindingResult result,它为字段date 注册了一个FieldError。如何消除此错误?
假设错误被添加为result.rejectValue("date", "my_code", "my_message") ;
提前致谢
【问题讨论】:
我有一个BindingResult result,它为字段date 注册了一个FieldError。如何消除此错误?
假设错误被添加为result.rejectValue("date", "my_code", "my_message") ;
提前致谢
【问题讨论】:
嗯,首先,BindingResult 是一个接口,而不是一个具体的类,并且该接口没有指定任何消除错误的方法。
根据您正在处理的接口的实现,可能有一个方法(超出 BindingResult 接口中指定的方法)来执行此操作,但似乎不太可能。
我唯一能想到的就是创建一个新的 BindingResult 实例,然后遍历错误并在新实例中重新创建除您要忽略的之外的所有实例。
【讨论】:
org.springframework.validation.BindingResult result.
List<ObjectError> allErrors = bindingResult.getAllErrors(); 然后获取 DefaultMessageSourceResolvable 的消息并在必要时从列表中删除该对象。
这是一个实现 @GreyBeardedGuy 答案的示例,假设您要删除链接到 field 的 specialField 中的 class MyModel 与 modelAttribute 名称为 myModel 的 error来自BindingResultresult:
List<FieldError> errorsToKeep = result.getFieldErrors().stream()
.filter(fer -> !fer.getField().equals("specialField "))
.collect(Collectors.toList());
result = new BeanPropertyBindingResult(vacancyDTO, "vacancyDTO");
for (FieldError fieldError : errorsToKeep) {
result.addError(fieldError);
}
【讨论】:
重要的问题是,它最初是如何到达那里的?我假设 date 是一个 java.util.Date 字段并且由于格式问题而绑定失败?
例如,您输入了01/01/1970,它期望1970-01-01 或类似的东西?这里的原因是因为 Spring MVC 有一个默认的日期绑定器。它需要获取日期的字符串表示并将其转换为 java.util.Date 并失败,因为它不匹配适当的格式。
看看@InitBinder 以及如何覆盖string-to-date 转换以接受不同的格式。
【讨论】:
@InitBinder。问题是,我无法控制 Spring 引发的错误。也许我不想为所有的错误而烦恼。
rejectValue 添加对吗?你应该自己阻止它被添加。
@InitBinder 何时抛出错误的信息