如何从BindingResult获取控制器中的错误文本

我有一个返回JSON的控制器。它采用一种形式,该形式通过spring注释进行验证。我可以从BindingResult获取FieldError列表,但是它们不包含JSP将在标记中显示的文本。如何获取错误文本以JSON发送回去?

@RequestMapping(method = RequestMethod.POST)

public

@ResponseBody

JSONResponse submit(@Valid AnswerForm answerForm, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response) {

if (result.hasErrors()) {

response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

JSONResponse r = new JSONResponse();

r.setStatus(JSONResponseStatus.ERROR);

//HOW DO I GET ERROR MESSAGES OUT OF BindingResult???

} else {

JSONResponse r = new JSONResponse();

r.setStatus(JSONResponseStatus.OK);

return r;

}

}

JSONREsponse类只是一个POJO

public class JSONResponse implements Serializable {

private JSONResponseStatus status;

private String error;

private Map<String,String> errors;

private Map<String,Object> data;

...getters and setters...

}

调用BindingResult.getAllErrors()返回一个FieldError对象数组,但没有实际错误。

回答:

我仍然不使用Spring-MVC 3.0

但是我认为Spring 2.5使用的相同方法可以满足你的需求

for (Object object : bindingResult.getAllErrors()) {

if(object instanceof FieldError) {

FieldError fieldError = (FieldError) object;

System.out.println(fieldError.getCode());

}

if(object instanceof ObjectError) {

ObjectError objectError = (ObjectError) object;

System.out.println(objectError.getCode());

}

}

希望对你有用

更新

如果要获取资源包提供的消息,则需要一个注册的messageSource实例(它必须称为messageSource)

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

<property name="basenames" value="ValidationMessages"/>

</bean>

将你的MessageSource实例注入视图中

@Autowired

private MessageSource messageSource;

要获取你的消息,请执行以下操作

for (Object object : bindingResult.getAllErrors()) {

if(object instanceof FieldError) {

FieldError fieldError = (FieldError) object;

/**

* Use null as second parameter if you do not use i18n (internationalization)

*/

String message = messageSource.getMessage(fieldError, null);

}

}

你的验证器应该看起来像

/**

* Use null as fourth parameter if you do not want a default message

*/

errors.rejectValue("<FIELD_NAME_GOES_HERE>", "answerform.questionId.invalid", new Object [] {"123"}, null);

以上是 如何从BindingResult获取控制器中的错误文本 的全部内容, 来源链接: utcz.com/qa/432710.html

回到顶部