获取BindingResults以显示与错误相关的字段

时间:2013-10-09 02:05:17

标签: java spring-mvc web-applications

我正在尝试为我正在开发的Spring WebApp编写集成测试。在此过程中的某个时刻,我使用以下代码从BindingResult中提取错误列表:

    BindingResult checkMe = (BindingResult)mv.getModelMap().get("org.springframework.validation.BindingResult.module");
    assertEquals(1, check.getErrorCount());

    //Check to make sure it is the right field that errored, and had the right error.
    if(check.hasErrors()){

        List<ObjectError> errors = checkMe.getAllErrors();
        assertEquals(1, errors.size());
        ObjectError tester = errors.get(0); 
        assertEquals("Range", tester.getCode());
        assertEquals("must be between 0 and 365", tester.getDefaultMessage());          

    }

我想添加一行来断言抛出错误的字段实际上是“daysToComplete”。我知道信息在某处,因为checkMe.getAllErrors().toString()返回:

[Field error in object 'module' on field 'daysToComplete': rejected value [1000]; codes [Range.module.daysToComplete,Range.daysToComplete,Range.int,Range]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [module.daysToComplete,daysToComplete]; arguments []; default message [daysToComplete],365,0]; default message [must be between 0 and 365]]

我如何才能获得该领域?我查看了文档并询问谷歌但似乎没有出现......

2 个答案:

答案 0 :(得分:4)

您的ObjectError可能是FieldError的一个实例,它扩展了ObjectError。 FieldError上应该有一个getField()方法,它会告诉你名字。尝试以下(未经测试):

if (check.hasErrors()){

    List<ObjectError> errors = checkMe.getAllErrors();
    assertEquals(1, errors.size());

    FieldError tester = null;
    if (errors.get(0) instanceof FieldError) {
        tester = errors.get(0);
    } else {
        assertFail("Wrong binding result error type.");
    }

    assertEquals("daysToComplete", tester.getField());
    assertEquals("Range", tester.getCode());
    assertEquals("must be between 0 and 365", tester.getDefaultMessage());          
}

答案 1 :(得分:2)

public String nameMethod(@ModelAttribute Client client, BindingResult result) {
   for (ObjectError error : result.getAllErrors()) { // 1.
       String fieldErrors = ((FieldError) error).getField(); // 2.
       System.out.println(fieldErrors);
   }
}
  1. 获取从BindingResult获得的所有错误
  2. 获取产生绑定错误的字段的名称。

现在可以将错误返回给用户,并告诉他应该验证哪个字段。

问候。