我正在尝试为我正在开发的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]]
我如何才能获得该领域?我查看了文档并询问谷歌但似乎没有出现......
答案 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);
}
}
现在可以将错误返回给用户,并告诉他应该验证哪个字段。
问候。