我正在开发一个 Spring MVC 3.1 Web 应用程序,几乎我所有的表单提交都是使用 jQuery ajax 调用和表单序列化完成的。这很好用。我需要一种从服务器拉回验证错误消息的方法,所以我找了一个例子。我在网上找到了一个,它基本上将 BindingResult 对象放入自定义 JsonResponse 对象中,然后将其作为@ResponseBody
. 这也很好用!这是我们遇到问题的地方,虽然BindingResult
对象回来了,但没有任何消息像我使用 Spring:form 标签时那样被插值。我调查了这个问题,发现我可以尝试SpringMessageSourceInterpolater
用自定义的覆盖,这有帮助,但现在只插入 JSR-303 验证错误,而不是实际的TypeMismatch
来自 Spring 绑定的错误。这是我正在做的一个例子:
public @ResponseBody
JSonResponse addQuote(@ModelAttribute("quote") @Valid QuoteBean quote, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jsonResponse = new JsonResponse();
//Some handle code
jsonResponse.setStatus(JsonResponse.ResponseStatus.INVALID);
jsonResponse.setResult(result.getAllErrors());
return jsonResponse;
}
正如我所说,Json 被完美地序列化,对于 JSR-303 错误,defaultMessage
错误对象的字段是一个插值消息,但如果错误是 Spring TypeMismatch
(就像放入1
一个字段我绑定到一个日期) ,我反而得到了一条长长的 Spring 生成消息。我尝试添加error.getCodes()
与对象上的所有内容相对应的消息代码,但无济于事(例如TypeMismatch.fieldname
)。肯定有人使用过 Spring 和 Ajax 并进行了此验证,但我找不到答案。