【问题标题】:Spring - How to remove a `FieldError` from a BindingResult?Spring - 如何从 BindingResult 中删除“FieldError”?
【发布时间】:2019-07-09 19:00:54
【问题描述】:

我有一个BindingResult result,它为字段date 注册了一个FieldError。如何消除此错误?

假设错误被添加为result.rejectValue("date", "my_code", "my_message") ;

提前致谢

【问题讨论】:

    标签: java spring


    【解决方案1】:

    嗯,首先,BindingResult 是一个接口,而不是一个具体的类,并且该接口没有指定任何消除错误的方法。

    根据您正在处理的接口的实现,可能有一个方法(超出 BindingResult 接口中指定的方法)来执行此操作,但似乎不太可能。

    我唯一能想到的就是创建一个新的 BindingResult 实例,然后遍历错误并在新实例中重新创建除您要忽略的之外的所有实例。

    【讨论】:

    • 哦,太难过了。您是否碰巧知道任何可以消除错误的此类实现?顺便说一句,我的声明是这样的:org.springframework.validation.BindingResult result.
    • 不,我不知道有一个,可能是因为这不会出现在“正常”使用中。正如 John Vint 在他的回答中指出的那样,最好首先检查一下为什么会出现错误。
    • 我面临着一个对象在一个页面中绑定两个表单的相同问题。它不是很漂亮,但您可以像这样过滤错误列表:List<ObjectError> allErrors = bindingResult.getAllErrors(); 然后获取 DefaultMessageSourceResolvable 的消息并在必要时从列表中删除该对象。
    【解决方案2】:

    这是一个实现 @GreyBeardedGuy 答案的示例,假设您要删除链接到 fieldspecialField 中的 class MyModelmodelAttribute 名称为 myModelerror来自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);
            }
    

    【讨论】:

      【解决方案3】:

      重要的问题是,它最初是如何到达那里的?我假设 date 是一个 java.util.Date 字段并且由于格式问题而绑定失败?

      例如,您输入了01/01/1970,它期望1970-01-01 或类似的东西?这里的原因是因为 Spring MVC 有一个默认的日期绑定器。它需要获取日期的字符串表示并将其转换为 java.util.Date 并失败,因为它不匹配适当的格式。

      看看@InitBinder 以及如何覆盖string-to-date 转换以接受不同的格式。

      【讨论】:

      • 其实我使用@InitBinder。问题是,我无法控制 Spring 引发的错误。也许我不想为所有的错误而烦恼。
      • @th3an0maly 我想我的意思是,如果您使用的是@InitBinder,您应该可以控制该应用程序是否通过rejectValue 添加对吗?你应该自己阻止它被添加。
      • 我找不到任何关于决定 @InitBinder 何时抛出错误的信息
      猜你喜欢
      • 1970-01-01
      • 2020-09-05
      • 2011-10-05
      • 2016-11-24
      • 2020-10-19
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多