4

我正在尝试为我正在开发的 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]]

我如何才能获得该领域本身?我查看了文档并询问了谷歌,但似乎没有任何结果......

4

2 回答 2

6

您的 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());          
}
于 2013-10-09T02:55:33.253 回答
4
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. 获取产生绑定错误的字段的名称。

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

问候。

于 2018-08-01T14:04:10.797 回答