私は 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
のと同じように Date にバインドしています) 、代わりにSpringで生成された長いメッセージになってしまいます。オブジェクトにあるすべての に対応するメッセージ コードを追加しようとしerror.getCodes()
ましたが、役に立ちませんでした ( などTypeMismatch.fieldname
)。確かに誰かが Spring と Ajax を使用し、この検証が機能していましたが、答えが見つかりません。